在显示活动时,我应该在哪里开始需要动画的AnimationDrawable
?
使用onWindowFocusChanged
的开发人员指南recommends,但当活动属于TabHost
时,并不总是会调用此指南。
我引用:
重要的是要注意到 调用start()方法 无法调用AnimationDrawable 在你的onCreate()方法期间 活动,因为 AnimationDrawable尚未完全 附在窗户上。如果你想 立即播放动画, 然后,不需要互动 你可能想从中调用它 onWindowFocusChanged()方法在你的 活动,将在何时调用 Android让您的窗口成为焦点。
答案 0 :(得分:7)
我知道这个问题有点老了,但这可能对像我这样在这个问题上发生的人有所帮助。我开始使用AnimationDrawable的一种方法是创建一个新的Runnable并使用ImageView中的post方法。
你可以这样做:
ImageView spinner = (ImageView) findViewById(R.id.my_imageView);
spinner.setBackgroundResource(R.drawable.spinner);
spinner.post(new Runnable() {
public void run() {
AnimationDrawable anim = (AnimationDrawable) spinner.getBackground();
anim.start();
}
});
答案 1 :(得分:6)
并行线程方法似乎是最受欢迎的方法,但它确实提出了两个主要问题:
所以,我建议使用非常恰当的命名runOnUiThread()方法。在onResume()中调用它将确保您的动画代码将在主线程上运行,它将在附加窗口后运行,您将知道消息将在何处处理,并且没有小猫需要丢失它们住:
@Override
protected void onResume()
{
super.onResume();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
animation.start();
}
});
}
答案 2 :(得分:0)
当Activity到达前台时,始终会调用Activity onResume()
。尝试在那里开始。
答案 3 :(得分:0)
根据文档,您必须等到视图附加到窗口才能开始动画。因此,您应该将OnAttachStateChangeListener
添加到视图中,该视图将在附加时执行,并从那里开始动画。
ImageView loadingImg = (ImageView)v.findViewById(R.id.image);
loadingImg.setBackgroundResource(R.drawable.progressdialog);
loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground();
loadingAnimation.start();
}
@Override
public void onViewDetachedFromWindow(View v) {
}
});