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

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

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

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

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

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

Рисунок 1. Анимированное изображение.

Для анимации растровых изображений, таких как значки или иллюстрации, используйте API анимации для объектов типа drawable. Обычно эти анимации определяются статически с помощью ресурса drawable, но вы также можете определить поведение анимации во время выполнения.

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

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

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

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

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

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

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

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

Движение, основанное на физических принципах

Рисунок 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() . Этот набор параметров может включать в себя информацию о том, какие представления используются совместно различными активностями, чтобы фреймворк переходов мог связать их во время анимации.

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