Android 如何重置AnimationDrawable

Android 如何重置AnimationDrawable,android,animation,frame,drawable,Android,Animation,Frame,Drawable,我必须设置一个循环倒计时的动画,我通过使用AnimationDrawable设置ImageView背景的动画来实现(每个图像都删除了相应的圆切片)。问题是用户有能力暂停此动画,因此我必须重新加载动画,但随后出现问题。我尝试将动画设置为null,将ImageView的背景设置为null,设置动画的可见性,但实际上没有任何帮助,因为帧数保持不变。我必须找到一种方法来删除所有帧并添加新帧,或者将整个动画重置为默认状态 步骤1-初始化动画(起始帧索引为0) 步骤3-调用步骤2后,我再次调用步骤1,但Sy

我必须设置一个循环倒计时的动画,我通过使用AnimationDrawable设置ImageView背景的动画来实现(每个图像都删除了相应的圆切片)。问题是用户有能力暂停此动画,因此我必须重新加载动画,但随后出现问题。我尝试将动画设置为null,将ImageView的背景设置为null,设置动画的可见性,但实际上没有任何帮助,因为帧数保持不变。我必须找到一种方法来删除所有帧并添加新帧,或者将整个动画重置为默认状态

步骤1-初始化动画(起始帧索引为0)

步骤3-调用步骤2后,我再次调用步骤1,但Sys.out仍显示60为当前帧数。(此处的起始索引设置为点击暂停按钮时的最后一个隐藏帧。)

任何想法都欢迎


谢谢

android.view.animation.animation.reset()不起作用?

我遇到了同样的问题,停止动画会在当前帧上停止。我想让它表现得像iOS,停止会回到第一帧。此解决方案适合我:

((AnimationDrawable)(someButton.getBackground())).stop();
someButton.setBackgroundDrawable(null);
someButton.setBackgroundResource(R.drawable.animation);

这首先会阻止它(可能没有必要)。然后它杀死背景动画。最后,它会重新创建背景。

另一种可能的解决方案是在第一帧和最后一帧使用相同的图像,并执行以下操作,而不是调用stop()方法


如果有人进一步调查的话。还有一种方法叫做setVisible(布尔可见,布尔重新启动)。但是,这对我来说不起作用。

您可以尝试
公共布尔设置可见(布尔可见,布尔重新启动)
,它将播放一次动画。例如:

animationDrawable.setVisible(false, true);
这将在调用
stop()
后立即将(AnimationDrawable)
timerAnimation
发送到第一帧:

timerAnimation.stop();
timerAnimation.selectDrawable(0);

这是一个可动画绘制而非动画,因此这不是一个选项MO,此解决方案比公认的答案更好、更便宜。能否查看Compat.jumpDrawablesToCurrentState帮助:?
((AnimationDrawable)(someButton.getBackground())).setOneShot(true);
animationDrawable.setVisible(false, true);
timerAnimation.stop();
timerAnimation.selectDrawable(0);