所以我在过去的几个小时里做了一些阅读,我明白在完全附加 Drawable/ImageView 之前调用 AnimationDrawable 的 start() 不会启动动画。这看起来与通常的 UI 初始化过程非常一致(例如添加 View 后 View 的尺寸立即返回为 0)。
我想当我尝试从适配器的 getView() 方法启动动画时,也会出现同样的问题。使用执行 start() 调用的延迟 Runnable 可以解决此问题,但显然不是一个理想的解决方案。
一旦 ListView 的项目“完全附加”,有什么方法可以接收回调吗?
最佳答案
根据documentation ,您必须等到 View
附加到窗口后才能开始动画。因此,您应该将一个 OnAttachStateChangeListener
添加到 View 中,该 View 将在附加时执行,并从那里开始动画。
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) {
}
});
我尝试在 View
的 post()
方法中的 Runnable
中启动动画,但这不起作用。上述方法是我在 ListView
中可靠地启动动画的唯一方法。
关于android - 在 ListView 项目中启动 AnimationDrawable。元素什么时候附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780643/