Общие сведения об анимации

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

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

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

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

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

Рисунок 1. Анимированный объект Drawable.

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

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

Подробнее об анимации графики…

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

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

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

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

Дополнительные ресурсы: