一度に小さな角度増分で、画像を完全に回転させようとしています。
前のローテーションが表示された後に、次のローテーションを開始する必要があります。
回転がどれだけ速く発生するかは、私には何の意味もありません。各回転が表示される限り、私には問題ありません。つまり、実質的に「速すぎる」と見なすことができます。
これについては、いくつかの異なるアプローチを試みました。以下に実用的な解決策があります(少なくともこれらの行に沿ったものです-コードをいじっているので、完全にコンパイルできない可能性があります)。
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 秒かかります。
私の質問はこれです。
これを行うためのより良い方法はありますか?ローテーションをできるだけ速く行うことが目標である場合、各ローテーションが順番に表示されるように維持しますか?
これは製品などに実装される予定はありません。これはより人為的なテストであるため、回転をアニメーション化する「便利な」方法を探しているわけではありません。