如何重置AnimationDrawable

我必须animation循环倒数计时器,我正在使用AnimationDrawableanimationImageView的背景(每个图像的圆的相应切片删除)。 问题是用户有能力暂停这个animation,所以我不得不重新加载animation,但然后出现一个问题。 我已经尝试将animation设置为null,将ImageView的背景设置为null,设置animation的可见性,但实际上没有任何帮助,因为帧数保持不变。 我必须find一个解决方法,删除所有帧和添加新的或重置整个animation到默认状态。

步骤1 – 初始化animation(起始帧索引为0)

timerView.setBackgroundResource(R.drawable.timer_switch); timerAnimation = (AnimationDrawable)timerView.getBackground(); System.out.println("Number of frames: " + timerAnimation.getNumberOfFrames()); for (int frameIndex = startingFrameIndex; frameIndex < 60; frameIndex++) { if (frameIndex < 10) { uri = "drawable/timer_0000" + frameIndex; } else { uri = "drawable/timer_000" + frameIndex; } imageResourceId = getResources().getIdentifier(uri, null, getPackageName()); timerAnimation.addFrame(getResources().getDrawable(imageResourceId), timerImageFrameDuration); } 

第2步 – 这是棘手的部分,我不知道该怎么做。 我试过的东西:

 timerAnimation.stop(); timerAnimation.setCallback(null); timerAnimation.setVisibility(true, false); timerAnimation = null; 

步骤3 – 在调用步骤2之后,我再次调用步骤1,但Sys.out仍然显示60作为当前的帧数。 (当点击暂停button时,这里的起始索引被设置为最后的隐藏帧)。

任何想法是受欢迎的。

谢谢

Solutions Collecting From Web of "如何重置AnimationDrawable"

我有同样的问题停止animation将停止在当前帧。 我希望它的行为像iOS,在那里停止会回到第一帧。 这个解决scheme适用于我:

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

这首先停止它(可能没有必要)。 然后杀死背景animation。 最后,它重新创build背景。

一旦stop()被调用,这将会把(AnimationDrawable) timerAnimation发送到第一帧:

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

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

 ((AnimationDrawable)(someButton.getBackground())).setOneShot(true); 

如果有人进一步研究这一点。 还有一个叫做setVisible(boolean visible,boolean restart)的方法。 但是,这并不适用于我自己。

你可以尝试public boolean setVisible (boolean visible, boolean restart) ,它将播放一次animation。 例如:

 animationDrawable.setVisible(false, true); 

android.view.animation.Animation.reset()不工作?