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

Posted

技术标签:

【中文标题】在 ListView 项目中启动 AnimationDrawable。啥时候附上物品?【英文标题】:Starting AnimationDrawable in ListView items. When are the items attached?在 ListView 项目中启动 AnimationDrawable。什么时候附上物品? 【发布时间】:2012-04-04 13:21:27 【问题描述】:

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

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

一旦 ListView 的项目“完全附加”,有什么方法可以接收回调?

【问题讨论】:

您是否尝试过覆盖http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()? 【参考方案1】:

根据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) 
  
);

我尝试在Viewpost() 方法中的Runnable 中启动动画,但没有成功。上述方法是我可靠地在ListView 中开始动画的唯一方法。

【讨论】:

以上是关于在 ListView 项目中启动 AnimationDrawable。啥时候附上物品?的主要内容,如果未能解决你的问题,请参考以下文章

Android Drag-Sort-Listview - 以编程方式启动拖放

按下小部件ListView项目时Android开始活动

如何删除ListView添加项目动画?

Jake Wharton 的 LinePageIndicator 在视图回收后不会重新启动

listView不显示,除非我滚动它

带有 ListView 的 Android 可点击小部件在 ListItems 上不可点击