Плавные переходы, исчезающие надписи и отзывчивые кнопки придают интерфейсу эстетическую привлекательность. Всё это достигается с помощью анимаций, которые можно легко внедрить в проект благодаря встроенным средствам Android Studio. В этом уроке мы изучим, как оживить экран на языке Kotlin: рассмотрим простые методы, которые сразу же дадут ощутимый результат. Никаких сложных вычислений — только готовые инструменты, доступные даже для начинающих разработчиков.
Какие бывают анимации в Android
Система предоставляет несколько способов анимировать элементы. Самый простой — ViewPropertyAnimator, который позволяет менять свойства View: прозрачность, размер, положение, поворот. Чуть больше контроля даёт ObjectAnimator, работающий с любым объектом. Есть ещё анимации перехода между экранами и сложная рисованная анимация, но начинать стоит именно с ViewPropertyAnimator — он покрывает большинство повседневных задач и требует минимум кода.
Подготовка экрана
Создайте новый проект с пустым Activity. В файле activity_main.xml разместите кнопку и текстовую метку. Кнопке задайте id animateButton, тексту — targetText. На кнопке напишите «Запустить анимацию», на метке — любой текст. Интерфейс готов, теперь перейдём в MainActivity.kt и напишем логику.
Плавное исчезновение и появление
ViewPropertyAnimator вызывается напрямую на объекте View. Метод animate() возвращает объект, у которого можно задать нужные свойства и длительность. Например, чтобы плавно скрыть текст, используем alpha(0f). А чтобы вернуть обратно — alpha(1f).
val textView = findViewById<TextView>(R.id.targetText)
val button = findViewById<Button>(R.id.animateButton)
button.setOnClickListener {
textView.animate()
.alpha(0f)
.duration = 500 // полсекунды
}
После выполнения текст станет полностью прозрачным. Чтобы вернуть его, можно добавить второй вызов или настроить повторение.
Перемещение, поворот и масштаб
Тот же метод animate() позволяет двигать элементы, менять их размер и вращать. Вот пример, который сдвигает текст вправо на 200 пикселей, увеличивает его в полтора раза и поворачивает на 360 градусов — всё одновременно.
textView.animate()
.translationX(200f)
.scaleX(1.5f)
.scaleY(1.5f)
.rotation(360f)
.setDuration(800)
.start()
Метод start() в конце не обязателен, но иногда нужен для явного запуска. Все изменения происходят плавно в течение указанного времени.
Анимация с помощью ObjectAnimator
Если нужно анимировать свойство, которого нет у ViewPropertyAnimator, или управлять анимацией более тонко, используем ObjectAnimator. Он привязывается к конкретному объекту и его свойству. Например, изменим у текста размер шрифта (свойство textSize не поддерживается напрямую ViewPropertyAnimator).
val animator = ObjectAnimator.ofFloat(textView, "textSize", 14f, 32f)
animator.duration = 600
animator.start()
Первый параметр — объект, второй — имя свойства (как оно называется в геттере/сеттере), третий и четвёртый — начальное и конечное значения. Можно передать и больше значений для сложной траектории.
Анимация цепочкой: несколько шагов подряд
ViewPropertyAnimator можно объединять в цепочки с помощью withStartAction, withEndAction и слушателей. Например, сделаем так: при нажатии кнопка сначала уменьшается, потом возвращается к исходному размеру с небольшим подскоком.
button.animate()
.scaleX(0.8f)
.scaleY(0.8f)
.setDuration(100)
.withEndAction {
button.animate()
.scaleX(1f)
.scaleY(1f)
.setDuration(100)
.start()
}
.start()
Такой приём создаёт эффект нажатия без использования дополнительных библиотек. Пользователь видит, что кнопка «отозвалась» на касание.
Повторяющаяся анимация и бесконечное вращение
Иногда нужно, чтобы анимация зацикливалась — например, индикатор загрузки. Для этого у ObjectAnimator есть режимы повтора. Установим бесконечное вращение текста и автоматический возврат в исходное положение.
val rotateAnim = ObjectAnimator.ofFloat(textView, "rotation", 0f, 360f)
rotateAnim.duration = 1000
rotateAnim.repeatCount = ObjectAnimator.INFINITE
rotateAnim.repeatMode = ObjectAnimator.RESTART
rotateAnim.start()
Чтобы остановить анимацию, вызовите rotateAnim.cancel(). Это пригодится, когда нужно убрать индикатор после завершения загрузки.
Полезные советы
- Не увлекайтесь длительностью. Анимации дольше 500–800 мс начинают раздражать. Хороший ориентир — 300–500 мс для большинства эффектов.
- Тестируйте на реальном устройстве. Эмулятор может показывать анимации рывками, тогда как на живом телефоне всё будет гладко.
- Используйте аппаратное ускорение. По умолчанию анимации на View используют GPU, но если вы рисуете сложную графику, убедитесь, что слой кэшируется через
setLayerType. - Доступность. Помните, что некоторые пользователи отключают анимации в настройках системы. Проверьте, что приложение остаётся рабочим и без них.
Что мы сегодня освоили
Этот урок в среде Android Studio на языке Kotlin показал, как вдохнуть жизнь в статичные элементы интерфейса. Вы научились плавно менять прозрачность, двигать и вращать текст, анимировать кнопку при нажатии и создавать повторяющиеся эффекты. Полученные навыки помогут сделать ваше приложение более отзывчивым и современным. Попробуйте прямо сейчас добавить анимацию появления для всех элементов на главном экране — это просто, а результат порадует глаз.