我正在尝试将图像旋转一个完整的旋转,一次小角度增量。
每次进行的轮换应在前一次轮换显示后开始。
旋转发生的速度对我来说毫无意义——只要显示每个旋转,我就可以了。这意味着它实际上可以被认为是“太快了”。
我为此尝试了几种不同的方法。我在下面有一个可行的解决方案(至少是这些方面的东西 - 我一直在玩代码,所以它可能无法完全编译)。
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 秒才能完成。
我的问题是这个;
有没有更好的方法来做到这一点 - 如果目标是让旋转尽可能快地发生 - 并保持每个旋转按顺序显示?
这不会被应用到产品或任何东西中——这更像是一个人为的测试,所以我不会寻找任何更“方便”的旋转动画方式。