我有一个简单的RotateAnimation
无限期地动画ImageView
,直到我停止它为止。我将动画设置如下:
Animation spin = new RotateAnimation(0.0f, 1800.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
spin.setInterpolator(new LinearInterpolator());
spin.setRepeatCount(Animation.INFINITE);
spin.setDuration(5000);
imageView.setAnimation(spin);
当我打电话给imageView.cancelAnimation()
时,我是否可以将动画“冻结”在它结束的任何帧上(或者它处于什么角度)而不是将其重置为第一帧?
答案 0 :(得分:2)
我有一个应用程序,必须在达到其确定的角度后保持其旋转位置。我搜索了很长时间,最后发现调用setFillAfter()方法。这将停止重置旋转。
RotateAnimation rotate = new RotateAnimation(startingPoint, value, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
image.setAnimation(rotate);
rotate.setDuration(ROTATION_INTERVAL);
rotate.setFillAfter(true);
答案 1 :(得分:0)
最好将图像内容包装在RotateDrawable
中并将其设置为ImageView
,而不是使用动画。您仍然可以使用简单的处理程序重复调用setImageLevel()
以调整旋转角度,从而为过渡设置动画。
当冻结动画时,只需停止发布到Handler
,图像将保持其最后设定的级别值。然后,您可以通过将帖子恢复到Handler
来重新启动。
另一种选择是创建自定义ViewGroup
并使用getChildStaticTransformation()
将自定义转换应用于子ImageView
。您仍然可以手动处理动画步骤,因此您可以在任何您喜欢的位置开始/停止,但Transformation
是动画系统用于动画视图的动画,因此您可能会得到更接近该效果的结果。
HTH