Ответ
Для анимации изменений лейаута (например, изменения размеров, положения или видимости) используйте 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.