取消时防止RotateAnimation重置

时间:2012-01-13 04:56:48

标签: android animation frame rotateanimation

我有一个简单的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()时,我是否可以将动画“冻结”在它结束的任何帧上(或者它处于什么角度)而不是将其重置为第一帧?

2 个答案:

答案 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