Использовали ли сторонние библиотеки анимации в Android
Что проверяют
Умеете ли вы выбрать инструмент под задачу: когда хватает встроенных средств Android, а когда нужна сторонняя библиотека и чем за неё платят. Следом спрашивают про производительность анимаций в списках и про работу с дизайнером.
Как отвечать
Начните с того, что использовали, и сразу разделите встроенное и стороннее. Частая ошибка: MotionLayout называют сторонней библиотекой, хотя это часть androidx.constraintlayout от Google.
Встроенные средства, которые стоит упомянуть:
- View-система:
ViewPropertyAnimator,ValueAnimatorиObjectAnimator,AnimatedVectorDrawableдля иконок,SpringAnimationизandroidx.dynamicanimationдля физики пружины, Transition framework и MotionLayout для переходов между состояниями; - Compose:
animate*AsState,AnimatedVisibility,updateTransition,Animatable, этого хватает для большинства интерфейсных анимаций.
Сторонние библиотеки:
- Lottie: проигрывает JSON-анимацию, которую дизайнер экспортирует из After Effects через плагин Bodymovin. Во View это
LottieAnimationView, в ComposeLottieAnimationвместе сrememberLottieComposition. Подходит для иллюстраций, онбординга, пустых состояний; - Rive: интерактивные анимации с машиной состояний, когда анимация реагирует на действия пользователя.
Расскажите свой случай: что анимировали, почему встроенных средств не хватило, какие были проблемы. Если сторонние библиотеки не использовали, это нормально: так и скажите, объясните, чем обходились и в какой ситуации взяли бы Lottie.
Где спотыкаются
Не проверяют анимацию до интеграции. Lottie поддерживает не все возможности After Effects, а маски и матовые слои заметно нагружают отрисовку. Файл нужно согласовать с дизайнером и прогнать на слабом устройстве.
Запускают бесконечные анимации в элементах RecyclerView или LazyColumn и не останавливают их вне экрана. Это лишняя работа отрисовки, расход батареи и пропуск кадров на слабых телефонах.
Ставят библиотеку ради одной простой иконки. Для такой задачи хватает AnimatedVectorDrawable, а лишняя зависимость увеличивает размер приложения и требует обновлений.