在ListView项目中启动AnimationDrawable。什么时候附上物品?

时间:2012-03-20 02:30:42

标签: android animation android-listview

所以我在过去的几个小时里一直在做一些阅读,我明白在完全连接Drawable / ImageView之前在AnimationDrawable上调用start()不会启动动画。这似乎与通常的UI初始化过程非常一致(例如视图的维度在添加视图后立即返回为0)。

我想当我尝试从适配器的getView()方法启动动画时,同样的问题是错误的。使用执行start()调用的延迟Runnable解决了这个问题,但显然不是理想的解决方案。

一旦ListView的项目“完全附加”,有没有办法接收回调?

1 个答案:

答案 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()中启动动画的唯一方法。