Анимации могут добавлять визуальные подсказки, информирующие пользователей о происходящем в вашем приложении. Они особенно полезны при изменении состояния пользовательского интерфейса, например, при загрузке нового контента или появлении новых действий. Анимации также придают вашему приложению изысканный вид, делая его более качественным.
Android предлагает различные API для анимации в зависимости от типа анимации, который вам нужен. В этой документации представлен обзор различных способов добавления движения в пользовательский интерфейс.
Чтобы лучше понять, когда следует использовать анимацию, ознакомьтесь также с руководством Material Design о движении .
Анимированные растровые изображения
Рисунок 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()
. Этот набор параметров может включать в себя сведения о том, какие представления являются общими для действий, чтобы фреймворк переходов мог соединить их во время анимации.
Дополнительные ресурсы см. здесь: