Наконец-то я разобрался и решил проблему.
Я думал, что представление готово для просмотра конечному пользователю в onLayout
методе жизненного цикла представления.Итак, я переопределил метод onLayout
и сохранил в нем логику анимации.
@Override
public void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (changed) {
// Added animation logic
}
}
Когда я отлаживал код, я обнаружил, что метод onLayout
вызывается дважды в моем случае.После поиска в Google, я обнаружил, что он вызывается несколько раз для позиционирования этого представления в соответствии со всеми его родительскими представлениями.
Если условие if (changed)
удалено, оно вызывается 5 раз.
Я удалил логику анимации из метода onLayout
и обработал ее сам.Теперь он работает, как и ожидалось.
Итак, я узнал, что запуск или установка анимации для видов не рекомендуется в методе onLayout
.
Надеюсь, то, что я понял, правильно.Пожалуйста, поправьте меня, если мое понимание неверно.