Android中的AnimationDrawable问题

时间:2010-11-06 12:49:53

标签: android animation

我在Android中使用animationdrawable时遇到了一个常见问题。我想在Activity开始时在onCreate()方法中启动一个动画,但是很多人发现,它不起作用。

我已经阅读了很多建议,但似乎没有什么对我有用。如果我在onClick()中启动动画它可以工作,它需要用户输入,而不是立即启动。

我尝试在onCreate()中的一个单独的线程中启动它,但这也不起作用。我在这里读到:

http://code.google.com/p/android/issues/detail?id=1818

但没有一条建议有效,或者我无法理解。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

我遇到过类似的问题,并改为覆盖onWindowFocusChanged()而不是onCreate()和onResume():

public void onWindowFocusChanged(boolean hasFocus) 
{
    if (hasFocus)
    {
        animation.start();
    }
    else
    {   
        animation.stop();
    }
}

答案 1 :(得分:1)

我认为你必须在有问题的视图初始化完成后启动动画。你应该可以这样做:

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1);
tweenImage.setBackgroundResource(R.anim.cubicfacetween);      
tweenImage.post(new Runnable() {
    @Override
    public void run() {
        AnimationDrawable frameAnimation =
            (AnimationDrawable) tweenImage.getBackground();
        frameAnimation.start();
    }
}

imageView

中设置src
((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() {
            @Override
            public void run() {
                AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable();
                drawable.start();
            }
        });

答案 2 :(得分:0)

根据您提供的链接,您必须在单独的线程中启动动画。在Java中,您可以通过实现Runnable接口并以

启动它来实现
Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable
t.start();

你也可以写这样的代码

new Thread(new Runnable() {
    public void run(){
        // some code that runs outside the ui thread.
    }
}).start();

如果您不想实现一个全新的类。后者当然不是那么漂亮,但如果你正在做一个小项目,那么了解它可能会很好。

您是否以这种方式尝试过或者以其他方式启动过线程?

请同时阅读Painless Threading,了解在ui线程之外执行操作的可能性,以及如何在自己的线程中发布在ui线程上运行的方法。


编辑:在查看您发布的链接后,您必须等待一段时间才能启动您的主题,可能直到onCreate完成。根据{{​​3}},您应该可以稍后启动动画,例如在onResume调用中。您是否尝试在onCreate之后调用的方法中启动它?

你应该只在onCreate中创建事物,并在onStart或onResume上“启动”它们。