1

我正在尝试将图像旋转一个完整的旋转,一次小角度增量。

每次进行的轮换应在前一次轮换显示后开始。

旋转发生的速度对我来说毫无意义——只要显示每个旋转,我就可以了。这意味着它实际上可以被认为是“太快了”。

我为此尝试了几种不同的方法。我在下面有一个可行的解决方案(至少是这些方面的东西 - 我一直在玩代码,所以它可能无法完全编译)。

handler是一个 Handler 实例,并与下面的所有代码一起位于我开始的活动类的主体中。rotationIncrement是 0.36,所以我们通过在每次上一次旋转完成时向 UI 线程发布一个新的 Runnable 来“旋转”图像 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 次,我的三星 Galaxy Nexus 大约需要 16 秒才能完成。

我的问题是这个;

有没有更好的方法来做到这一点 - 如果目标是让旋转尽可能快地发生 - 并保持每个旋转按顺序显示?

这不会被应用到产品或任何东西中——这更像是一个人为的测试,所以我不会寻找任何更“方便”的旋转动画方式。

4

0 回答 0