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