我在Android中使用animationdrawable时遇到了一个常见问题。我想在Activity开始时在onCreate()方法中启动一个动画,但是很多人发现,它不起作用。
我已经阅读了很多建议,但似乎没有什么对我有用。如果我在onClick()中启动动画它可以工作,它需要用户输入,而不是立即启动。
我尝试在onCreate()中的一个单独的线程中启动它,但这也不起作用。我在这里读到:
http://code.google.com/p/android/issues/detail?id=1818
但没有一条建议有效,或者我无法理解。
有人可以帮忙吗?
答案 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
((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上“启动”它们。