16
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/your_drawable"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />

プログラムでドローアブルを回転させたい。

どうすればいいですか?

これが私のコールバックです

private class RotateListener implements RotateGestureDetector.OnRotateGestureListener{
    @Override
    public boolean onRotate(MotionEvent event1, MotionEvent event2,
            double deltaAngle) {

        return true;
    }
}

0.1以下deltaangle、抽出値が不明。

4

3 に答える 3

40

次のコードは、ImageView をその中心を中心に回転させます。

ImageView myImageView = (ImageView)findViewById(R.id.my_imageview);

AnimationSet animSet = new AnimationSet(true);
animSet.setInterpolator(new DecelerateInterpolator());
animSet.setFillAfter(true);
animSet.setFillEnabled(true);

final RotateAnimation animRotate = new RotateAnimation(0.0f, -90.0f,
    RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
    RotateAnimation.RELATIVE_TO_SELF, 0.5f);

animRotate.setDuration(1500);
animRotate.setFillAfter(true);
animSet.addAnimation(animRotate);

myImageView.startAnimation(animSet);
于 2013-02-27T08:24:28.103 に答える
3

Almero の Android Gesture Detectors を使用しようとしているので、適切な解決策を見つけるために同じことを行うことにしました。

public class MainActivity extends Activity {

    private RotateGestureDetector mRotateDetector;
    private float mRotationDegrees = 0.f;
    private static final float ROTATION_RATIO = 2;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRotateDetector = new RotateGestureDetector(getApplicationContext(), new RotateListener());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mRotateDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    private class RotateListener extends RotateGestureDetector.SimpleOnRotateGestureListener {
        @Override
        public boolean onRotate(RotateGestureDetector detector) {
            mRotationDegrees -= detector.getRotationDegreesDelta();
            ImageView v = (ImageView) findViewById(R.id.imageView);
            // For NineOldAndroids library only!
            ViewHelper.setRotation(v, mRotationDegrees * ROTATION_RATIO);
            // For HONEYCOMB and later only!
            v.setRotation(mRotationDegrees * ROTATION_RATIO);
            return true;
        }
    }
}

私にとっては問題なく動作します (2 本指の回転ジェスチャで ImageView を回転させることができます。注: 適切な回転メソッド呼び出しを選択することを忘れないでください。注意を引くために両方にコメントしました。

ROTATION_RATIO は、指の動きに対する回転応答を高速化するための単なる乗数です。ビューには任意の回転軸 (setRotation()、setRotationX()、および setRotationY()) メソッドを使用できます。

API レベルが 11 未満の Android デバイス (Honeycomb 以前のデバイス) でこのコードのサポートを有効にするには、NineOldAndroid ライブラリを使用することをお勧めします。

于 2013-02-27T08:19:16.940 に答える