Анимации могут добавлять визуальные подсказки, уведомляющие пользователей о том, что происходит в вашем приложении. Они особенно полезны, когда пользовательский интерфейс меняет состояние, например, когда загружается новый контент или становятся доступными новые действия. Анимации также придают вашему приложению безупречный вид, что придает ему более качественный вид.
Android включает в себя различные API-интерфейсы анимации в зависимости от того, какой тип анимации вам нужен. В этой документации представлен обзор различных способов добавления движения в пользовательский интерфейс.
Чтобы лучше понять, когда следует использовать анимацию, ознакомьтесь также с руководством по дизайну материалов о движении .
Анимация растровых изображений
Рисунок 1. Анимированный рисунок.
Чтобы анимировать растровую графику, например значок или иллюстрацию, используйте API рисуемой анимации. Обычно эти анимации определяются статически с помощью рисуемого ресурса, но вы также можете определить поведение анимации во время выполнения.
Например, хороший способ сообщить пользователю, что два действия связаны, — это анимировать кнопку воспроизведения, которая при нажатии превращается в кнопку паузы.
Дополнительные сведения см. в разделе Рисуемая графика Animate .
Анимация видимости и движения пользовательского интерфейса
Рисунок 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()
, и система запускает анимацию, чтобы поменять макеты.
Дополнительные сведения см. в статье Изменение макета Animate с помощью перехода . Пример кода см. в разделе BasicTransition .
Анимация между действиями
В Android 5.0 (уровень API 21) и более поздних версиях вы также можете создавать анимацию для перехода между вашими действиями. Он основан на той же структуре перехода, описанной в предыдущем разделе, но позволяет создавать анимацию между макетами в отдельных действиях .
Вы можете применять простые анимации, такие как перемещение нового действия сбоку или его постепенное появление, но вы также можете создавать анимации, которые переходят между общими представлениями в каждом действии. Например, когда пользователь касается элемента, чтобы просмотреть дополнительную информацию, вы можете перейти к новому действию с помощью анимации, которая плавно увеличивает этот элемент до заполнения экрана, как анимация, показанная на рис. 5.
Как обычно, вы вызываете startActivity()
, но передаете ему набор параметров, предоставляемых ActivityOptions.makeSceneTransitionAnimation()
. Этот набор параметров может включать в себя то, какие представления являются общими для действий, чтобы платформа перехода могла соединять их во время анимации.
Дополнительные ресурсы см.: