Запуск AnimationDrawable в элементах ListView.Когда прикреплены предметы? - PullRequest
2 голосов
/ 20 марта 2012

Итак, я читал последние несколько часов, и я понимаю, что вызов start () для AnimationDrawable до полного присоединения Drawable / ImageView не запустит анимацию.Это кажется вполне совместимым с обычным процессом инициализации пользовательского интерфейса (например, размеры представления возвращаются как 0 сразу после добавления представления).

Я полагаю, что эта же проблема является ошибкой, когда я пытаюсь запустить анимацию из метода getView () Адаптера.Использование отложенного Runnable, который выполняет вызов start (), решает эту проблему, но явно не является желательным решением.

Есть ли способ получить обратный вызов, когда элементы ListView «полностью присоединены»?

1 Ответ

4 голосов
/ 03 марта 2014

В соответствии с документацией , вы должны подождать, пока 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 вметод View post(), и это не сработало.Вышеупомянутый метод - единственный способ, которым я надежно запустил анимацию в ListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...