首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重置AnimationDrawable

如何重置AnimationDrawable
EN

Stack Overflow用户
提问于 2011-10-07 17:25:07
回答 6查看 18.3K关注 0票数 35

我必须对循环倒计时定时器进行动画处理,并使用AnimationDrawable对ImageView的背景进行动画处理(每个图像都删除了相应的圆形切片)。问题是用户有能力暂停这个动画,所以我必须重新加载动画,但随后出现了一个问题。我试着将动画设置为空,将ImageView的背景设置为空,设置动画的可见性,但实际上没有什么帮助,因为帧的数量保持不变。我必须找到一种解决方法来删除所有帧并添加新帧,或者将整个动画重置为默认状态。

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

代码语言:javascript
复制
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);
}

第二步--这是我不知道该怎么做的棘手的部分。我尝试过的东西:

代码语言:javascript
复制
timerAnimation.stop();
timerAnimation.setCallback(null);
timerAnimation.setVisibility(true, false);
timerAnimation = null;

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

任何想法都是受欢迎的。

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-19 07:53:56

我有相同的问题,停止动画将停止在当前帧。我希望它的行为像iOS一样,停止将返回到第一帧。这个解决方案对我很有效:

代码语言:javascript
复制
((AnimationDrawable)(someButton.getBackground())).stop();
someButton.setBackgroundDrawable(null);
someButton.setBackgroundResource(R.drawable.animation);

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

票数 14
EN

Stack Overflow用户

发布于 2013-02-07 12:13:43

这将在调用stop()后立即将(AnimationDrawable) timerAnimation发送到第一帧:

代码语言:javascript
复制
timerAnimation.stop();
timerAnimation.selectDrawable(0);
票数 98
EN

Stack Overflow用户

发布于 2012-05-24 01:42:17

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

代码语言:javascript
复制
((AnimationDrawable)(someButton.getBackground())).setOneShot(true);

如果有人进一步调查这件事的话。还有一个叫做setVisible(布尔可见,布尔重启)的方法。然而,这对我来说并不管用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7685327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档