android - AnimationDrawable.isRunning() 总是返回 true

标签 android android-animation

我遇到了一个奇怪的行为。 如果我使用 start() 启动 AnimationDrawable,那么在动画完成后,方法 isRunning() 仍将返回 true。它是“一次性”动画,不循环播放。

这是一个示例代码:

public class MyActivity extends Activity {
    private AnimationDrawable cartoon;
    private ImageView iv;
    private BitmapDrawable frame0, frame1;
    private final int sleep=1000;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        cartoon = new AnimationDrawable();
        cartoon.setOneShot(true);
        frame0 = new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.gridx0));
        frame1 = new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.gridx1));
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(iv==null) iv = (ImageView) findViewById(R.id.imageView);
        cartoon.addFrame(frame0, sleep);
        cartoon.addFrame(frame1, sleep);
        iv.setImageDrawable(cartoon);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(cartoon.isRunning()) Log.d("AnimationTest", "Animation already started");
        else cartoon.start();
        return true;
    }
}

这是输出:

02-22 14:18:42.187: DEBUG/AnimationTest(2043): Animation already started
02-22 14:18:52.093: DEBUG/AnimationTest(2043): Animation already started
02-22 14:18:52.166: DEBUG/AnimationTest(2043): Animation already started
...and so on.

因此动画第一次运行,然后 isRunning 将永远返回 true。 I also found similar issue posted to code.google.com , 但它已关闭,没有任何评论

我的问题是:

  1. 是否存在真正的错误或我误解了什么?
  2. 如何判断 AnimationDrawable 何时完成?

最佳答案

看了the source之后,我只能得出这样的结论,设置成oneshot就是真正的oneshot动画,没有repeat。至少,在不先调用 stop() 的情况下。

如果您在完成后调用 stop(),那么下一次调用 start() 就可以正常工作(至少在我的测试中是这样)。您如何调用 stop() 由您决定,但您可以安排一个计时器在您调用 start() 时的总持续时间结束后运行它。在这个类中没有回调确实有点糟糕。

如果您将经常使用此机制,则可能值得扩展 AnimationDrawable 以为其提供回调。如果这样做,您应该将它张贴在某个地方,以便将来您自己和他人更轻松。

关于android - AnimationDrawable.isRunning() 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15026558/

相关文章:

Android Studio 淡入主画面

Android Tween 动画在 startAnimation() 上闪烁

android - 如何逐渐隐藏 Recyclerview 滚动条上的项目

android - 带有 overridePendingTransition 的 Activity 的滑动动画有奇怪的效果

android - 拖放在 nhaarman 的 ListviewAnimation 库中不起作用

android - 如何通过 kotlin 中的 Intent 传递对象的 MutableList

android - 可以从 AsyncTask.doInBackground() 读取 UI 线程中的值

java - 通过 Android 使用 WCF 服务

android - 使用额外的模块为 android 构建 opencv 3.0

Android:每秒更新一次