android - 在 ListView 项目中启动 AnimationDrawable。元素什么时候附加?

标签 android animation android-listview

所以我在过去的几个小时里做了一些阅读,我明白在完全附加 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) {
  }
});

我尝试在 Viewpost() 方法中的 Runnable 中启动动画,但这不起作用。上述方法是我在 ListView 中可靠地启动动画的唯一方法。

关于android - 在 ListView 项目中启动 AnimationDrawable。元素什么时候附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780643/

相关文章:

java - 添加毫秒的 Android 日期不在正确的时间

javascript - 如何设计具有下拉效果的下拉菜单?

css - 纯CSS3动画: 2 parts animation,一个接一个

Android 依次下载多个文件并在ListView中显示进度

android - 让 GridView 项目完全正方形

android - 如何让ListView Adapter中的OnClick调用Activity函数

Android Spinner - onItemSelected/setOnItemSelectedListener 未触发

java - 使用 android studio 在 java 文件中找不到 android.support.v7.widget.toolbar?

android - ViewPager fragment - 共享元素转换

android - 如何从最新的 minSdkVersion 转换 minSdkVersion