Android 防止在取消时重置RotateAnimation

Android 防止在取消时重置RotateAnimation,android,animation,frame,rotateanimation,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.setRe

我有一个简单的
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()
时,是否可以将动画“冻结”在其结束的任何帧上(或其处于的任何角度)与其将其重置为第一帧,不如将图像内容包装在可旋转的
中,并将其设置为
图像视图,而不是使用动画。通过使用一个简单的处理程序反复调用
setImageLevel()
来调整旋转角度,仍然可以设置转换动画

当需要冻结动画时,只需停止发布到
处理程序
,图像将保持其上次设置的级别值。然后,如果愿意,可以通过恢复到
处理程序的POST来重新启动

另一个选项是创建自定义的
视图组
,并使用
getChildStaticTransformation()
将自定义转换应用于子
ImageView
。您仍然可以手动处理动画步骤,因此可以在任意点启动/停止,但动画系统使用
转换
为视图设置动画,以便获得更接近该效果的结果


HTH

我有一个应用程序,在到达确定的角度后必须保持其旋转位置。我四处搜索了很长一段时间,最终发现调用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);

我想这是可行的。唯一的问题是,当我尝试将它们用作不确定的进度条时,
rotatedravable
s并没有那么平滑。你知道如何提高不确定进度条的帧速率或速度吗?不公开
ProgressBar
使用一个
AnimatedRotateDrawable
,该类具有这些属性,但是一个隐藏类。我添加了另一个用于转换视图的选项。要获得更平滑的效果,您可能需要手动调用插值器上的方法,以便知道在每一步调整动画的程度。是否有使用RotatedRavable的示例?我在android SDK中找不到任何。