我必须为循环倒计时器设置动画,我是通过使用AnimationDrawable为ImageView的背景设置动画来实现的(每个图像都删除了圆圈的相应切片)。问题是用户能够暂停此动画,因此我必须重新加载动画,但随后会出现问题。我已经尝试将动画设置为null,将ImageView的背景设置为null,设置动画的可见性,但几乎没有任何帮助,因为帧数保持不变。我必须找到一个解决方法,删除所有帧并添加新帧或将整个动画重置为默认状态。
步骤1 - 初始化动画(起始帧索引为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作为当前帧数。 (点击暂停按钮时,此处的起始索引设置为最后一个隐藏的帧。)
欢迎任何想法。
由于
答案 0 :(得分:85)
一旦调用timerAnimation
,这会将(AnimationDrawable)stop()
发送到第一帧:
timerAnimation.stop();
timerAnimation.selectDrawable(0);
答案 1 :(得分:13)
我遇到了同样的问题,停止动画会在当前帧停止。我希望它表现得像iOS,停止会回到第一帧。这个解决方案对我有用:
((AnimationDrawable)(someButton.getBackground())).stop();
someButton.setBackgroundDrawable(null);
someButton.setBackgroundResource(R.drawable.animation);
首先停止它(可能没有必要)。然后它杀死了背景动画。最后,它重新创建背景。
答案 2 :(得分:2)
另一种可能的解决方案是为第一帧和最后一帧提供相同的图像,并执行以下操作而不是调用stop()方法。
((AnimationDrawable)(someButton.getBackground())).setOneShot(true);
如果有人进一步研究这个问题。还有一个名为setVisible的方法(boolean visible,boolean restart)。但是,这对我自己不起作用。
答案 3 :(得分:2)
您可以尝试public boolean setVisible (boolean visible, boolean restart)
,它会播放一次动画。例如:
animationDrawable.setVisible(false, true);
答案 4 :(得分:-2)
android.view.animation.Animation.reset()不起作用?