1

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

4

2 回答 2

3

我有一个应用程序在达到其确定的角度后必须保持其旋转位置。我搜索了一段时间,终于找到了调用 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);
于 2013-01-03T21:25:11.563 回答
0

您最好将图像内容包装在 a 中RotateDrawable并将其设置为ImageView而不是使用动画。您仍然可以通过使用简单的 Handler 重复调用setImageLevel()以调整旋转角度来为过渡设置动画。

当需要冻结动画时,只需停止发布到Handler,图像将保持在其最后设置的级别值。然后,如果您愿意,可以通过将帖子恢复到Handler.

另一种选择是创建一个自定义ViewGroup并用于getChildStaticTransformation()将自定义转换应用于 child ImageView。您仍将手动处理动画步骤,因此您可以在您喜欢的任何时间点开始/停止,但Transformation动画系统用于动画视图,因此您可能会获得更接近该效果的结果。

高温高压

于 2012-01-13T05:13:19.817 回答