1

一度に小さな角度増分で、画像を完全に回転させようとしています。

前のローテーションが表示された後に、次のローテーションを開始する必要があります。

回転がどれだけ速く発生するかは、私には何の意味もありません。各回転が表示される限り、私には問題ありません。つまり、実質的に「速すぎる」と見なすことができます。

これについては、いくつかの異なるアプローチを試みました。以下に実用的な解決策があります(少なくともこれらの行に沿ったものです-コードをいじっているので、完全にコンパイルできない可能性があります)。

handlerは Handler インスタンスであり、開始元のアクティビティ クラスの本体にある以下のすべてのコードと一緒です。rotationIncrementは 0.36 であるため、前の回転が完了するたびに新しい Runnable を UI スレッドにポストすることで、画像を 1000 回「回転」しています。

public void start(View view) {
    MainActivity.rotation=0;
    imageview.setScaleType(ScaleType.MATRIX);
    handler.post(new RotationRunnable());       
}

public class RotationRunnable implements Runnable {
        @Override
        public void run() {
            MainActivity.rotation+=rotationIncrement;
            //Log.d("Rotating", String.valueOf(rotation));
            Matrix matrix = new Matrix(imageview.getImageMatrix());
            matrix.setRotate(rotation);
            imageview.setImageMatrix(matrix);
            imageview.invalidate();

            if (MainActivity.rotation<360) {
                handler.post(new RotationRunnable());
            } else {
                Log.d("Elapsed", String.valueOf((System.nanoTime()-startTime)));
            }
        }
}

上記のコードにより、非常にスムーズな「アニメーション」が得られます。1000 回転の場合、Samsung Galaxy Nexus で完了するまでに約 16 秒かかります。

私の質問はこれです。

これを行うためのより良い方法はありますか?ローテーションをできるだけ速く行うことが目標である場合、各ローテーションが順番に表示されるように維持しますか?

これは製品などに実装される予定はありません。これはより人為的なテストであるため、回転をアニメーション化する「便利な」方法を探しているわけではありません。

4

0 に答える 0