所以我在过去的几个小时里一直在做一些阅读,我明白在完全连接Drawable / ImageView之前在AnimationDrawable上调用start()不会启动动画。这似乎与通常的UI初始化过程非常一致(例如视图的维度在添加视图后立即返回为0)。
我想当我尝试从适配器的getView()方法启动动画时,同样的问题是错误的。使用执行start()调用的延迟Runnable解决了这个问题,但显然不是理想的解决方案。
一旦ListView的项目“完全附加”,有没有办法接收回调?
答案 0 :(得分:4)
根据documentation,您必须等到View
附加到窗口后再开始动画。因此,您应该将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) {
}
});
我已尝试在Runnable
的{{1}}方法的View
中启动动画,但这不起作用。上面的方法是我可靠地在post()
中启动动画的唯一方法。