Введение в анимацию

Попробуйте способ Compose
Jetpack Compose — рекомендуемый набор инструментов пользовательского интерфейса для Android. Узнайте, как использовать анимацию в Compose.

Анимации могут добавлять визуальные подсказки, которые уведомляют пользователей о том, что происходит в вашем приложении. Они особенно полезны, когда пользовательский интерфейс меняет состояние, например, когда загружается новый контент или становятся доступны новые действия. Анимации также добавляют вашему приложению отточенный вид, что придает ему более качественный вид и ощущение.

Android включает в себя различные API анимации в зависимости от того, какой тип анимации вам нужен. Эта документация содержит обзор различных способов добавления движения в ваш пользовательский интерфейс.

Чтобы лучше понять, когда следует использовать анимацию, ознакомьтесь также с руководством по материальному дизайну о движении .

Анимированные растровые изображения

Рисунок 1. Анимированный рисунок.

Чтобы анимировать растровую графику, такую ​​как значок или иллюстрация, используйте API рисуемой анимации. Обычно эти анимации определяются статически с помощью рисуемого ресурса, но вы также можете определить поведение анимации во время выполнения.

Например, хороший способ сообщить пользователю, что два действия связаны, — это анимировать кнопку воспроизведения, которая при нажатии превращается в кнопку паузы.

Для получения дополнительной информации прочтите статью Анимация рисованной графики .

Анимация видимости и движения пользовательского интерфейса

Рисунок 2. Легкая анимация при появлении и исчезновении диалогового окна делает изменение пользовательского интерфейса менее резким.

Если вам необходимо изменить видимость или положение представлений в макете, лучше всего включить легкую анимацию, чтобы помочь пользователю понять, как меняется пользовательский интерфейс.

Чтобы переместить, показать или скрыть представления в текущем макете, вы можете использовать систему анимации свойств, предоставляемую пакетом android.animation , доступным в Android 3.0 (уровень API 11) и выше. Эти API обновляют свойства ваших объектов View в течение определенного периода времени, непрерывно перерисовывая представление по мере изменения свойств. Например, когда вы меняете свойства положения, представление перемещается по экрану. Когда вы меняете свойство альфа, представление постепенно появляется или исчезает.

Для самого простого способа создания этих анимаций включите анимацию в вашем макете, чтобы при изменении видимости представления анимация применялась автоматически. Для получения дополнительной информации см. Автоматическое анимирование обновлений макета .

Чтобы узнать, как создавать анимации с помощью системы анимации свойств, прочтите Обзор анимации свойств . Вы также можете просмотреть следующие страницы для создания общих анимаций:

Движение, основанное на физике

Рисунок 3. Анимация, созданная с помощью ObjectAnimator.

Рисунок 4. Анимация, созданная с использованием API на основе физики.

По возможности применяйте к анимациям физику реального мира, чтобы они выглядели естественно. Например, они должны сохранять импульс при изменении цели и плавно переходить из одной в другую во время любых изменений.

Для обеспечения такого поведения библиотека поддержки Android включает в себя API-интерфейсы анимации на основе физики, которые используют законы физики для управления процессом анимации.

Ниже приведены две распространённые анимации, основанные на физике:

Анимации, не основанные на физике, например, созданные с помощью API ObjectAnimator , довольно статичны и имеют фиксированную продолжительность. Если целевое значение изменяется, необходимо отменить анимацию в момент изменения целевого значения, перенастроить анимацию с новым значением в качестве нового начального значения и добавить новое целевое значение. Визуально этот процесс создает резкую остановку анимации и разрозненное движение после этого, как показано на рисунке 3.

Анимации, созданные с помощью API анимации на основе физики, таких как DynamicAnimation , приводятся в действие силой. Изменение целевого значения приводит к изменению силы. Новая сила применяется к существующей скорости, что обеспечивает непрерывный переход к новой цели. Этот процесс приводит к более естественной анимации, как показано на рисунке 4.

Анимация изменений макета

Рисунок 5. Анимацию, показывающую больше деталей, можно создать, изменив макет или начав новое действие.

На Android 4.4 (уровень API 19) и выше вы можете использовать структуру перехода для создания анимаций при замене макета в текущей активности или фрагменте. Все, что вам нужно сделать, это указать начальный и конечный макет и тип анимации, который вы хотите использовать. Затем система вычисляет и выполняет анимацию между двумя макетами. Вы можете использовать это для замены всего пользовательского интерфейса или для перемещения или замены только некоторых представлений.

Например, когда пользователь нажимает на элемент, чтобы увидеть дополнительную информацию, вы можете заменить макет сведениями об элементе, применив переход, подобный показанному на рисунке 5.

Начальный и конечный макеты хранятся в Scene , хотя начальная сцена обычно определяется автоматически из текущего макета. Вы создаете Transition , чтобы сообщить системе, какой тип анимации вам нужен, затем вызываете TransitionManager.go() , и система запускает анимацию, чтобы поменять макеты.

Для получения дополнительной информации прочтите Анимация изменений макета с помощью перехода . Для примера кода ознакомьтесь с BasicTransition .

Анимация между действиями

На Android 5.0 (уровень API 21) и выше вы также можете создавать анимации, которые переходят между вашими действиями. Это основано на той же структуре перехода, которая описана в предыдущем разделе, но позволяет вам создавать анимации между макетами в отдельных действиях .

Вы можете применять простые анимации, такие как скольжение нового действия сбоку или его постепенное появление, но вы также можете создавать анимации, которые переходят между общими представлениями в каждом действии. Например, когда пользователь нажимает на элемент, чтобы увидеть больше информации, вы можете перейти к новому действию с анимацией, которая плавно увеличивает этот элемент, чтобы заполнить экран, как анимация, показанная на рисунке 5.

Как обычно, вы вызываете startActivity() , но передаете ему набор параметров, предоставленных ActivityOptions.makeSceneTransitionAnimation() . Этот набор параметров может включать в себя то, какие представления являются общими для действий, чтобы фреймворк перехода мог соединить их во время анимации.

Дополнительные ресурсы см. здесь: