Как анимировать layout изменения

«Как анимировать layout изменения» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для анимации изменений лейаута (например, изменения размеров, положения или видимости) используйте Transition API или ViewPropertyAnimator.

1. Transition API (для сложных анимаций):

val transition = TransitionInflater.from(context).inflateTransition(R.transition.fade)
TransitionManager.beginDelayedTransition(parentView, transition)
view.visibility = View.VISIBLE // или изменение layout-параметров

2. ViewPropertyAnimator (для простых анимаций):

view.animate()
    .alpha(1f)
    .translationX(100f)
    .setDuration(300)
    .start()

3. ValueAnimator (кастомные анимации):

ValueAnimator.ofInt(startWidth, endWidth).apply {
    addUpdateListener { animator ->
        view.layoutParams.width = animator.animatedValue as Int
        view.requestLayout()
    }
    duration = 300
    start()
}

Важно:

  • Используйте TransitionManager для анимации изменений в ConstraintLayout.
  • Для плавности избегайте анимаций в onMeasure/onLayout.
  • Оптимизируйте анимации с помощью Hardware Accelerated Rendering.