Анимационные ресурсы

Ресурс анимации может определять один из двух типов анимации:

Анимация свойств
Создает анимацию путем изменения значений свойств объекта в течение заданного периода с помощью Animator .
Посмотреть анимацию

Существует два типа анимации, которые можно создавать с помощью инфраструктуры просмотра анимации:

Анимация свойств

Анимация, определенная в XML, которая изменяет свойства целевого объекта, такие как цвет фона или значение альфа, в течение заданного периода времени.

расположение файла:
res/animator/ filename .xml
Имя файла используется в качестве идентификатора ресурса.
тип данных скомпилированного ресурса:
Указатель ресурса на ValueAnimator , ObjectAnimator или AnimatorSet
ссылка на ресурс:
В коде на основе Java или Kotlin: R.animator. filename
В XML: @[ package :]animator/ filename
синтаксис:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

Файл должен иметь один корневой элемент: <set> , <objectAnimator> или <valueAnimator> . Вы можете группировать элементы анимации внутри элемента <set> , включая другие элементы <set> .

элементы:
<set>
Контейнер, содержащий другие элементы анимации ( <objectAnimator> , <valueAnimator> или другие элементы <set> ). Представляет AnimatorSet .

Вы можете указать вложенные теги <set> для дальнейшей группировки анимации. Каждый <set> может определять свой собственный атрибут ordering .

Атрибуты:

android:ordering
Ключевое слово . Определяет порядок воспроизведения анимаций в этом наборе.
Ценить Описание
sequentially Воспроизведение анимации в этом наборе последовательно.
together (по умолчанию) Одновременно воспроизводите анимацию из этого набора.
<objectAnimator>
Анимирует определенное свойство объекта в течение определенного периода времени. Представляет ObjectAnimator .

Атрибуты:

android:propertyName
Нить . Необходимый . Свойство объекта для анимации, на которое ссылается его имя. Например, вы можете указать "alpha" или "backgroundColor" для объекта View . Однако элемент objectAnimator не предоставляет target атрибут, поэтому вы не можете настроить анимацию объекта в объявлении XML. Вам необходимо расширить XML-ресурс анимации, вызвав loadAnimator() и вызвать setTarget() чтобы установить целевой объект, содержащий это свойство.
android:valueTo
float, int или цвет . Необходимый . Значение, где заканчивается анимированное свойство. Цвета представлены в виде шестизначных шестнадцатеричных чисел, например #333333.
android:valueFrom
float, int или цвет . Значение, с которого начинается анимированное свойство. Если не указано, анимация начинается со значения, полученного методом get свойства. Цвета представлены в виде шестизначных шестнадцатеричных чисел, например #333333.
android:duration
инт . Время анимации в миллисекундах. По умолчанию установлено 300 миллисекунд.
android:startOffset
инт . Количество миллисекунд, в течение которых анимация задерживается после start() .
android:repeatCount
инт . Сколько раз повторять анимацию. Установите значение "-1" для бесконечного повторения или положительное целое число. Например, значение "1" означает, что анимация повторяется один раз после первого запуска анимации, поэтому анимация воспроизводится в общей сложности два раза. Значение по умолчанию — "0" , что означает отсутствие повторения.
android:repeatMode
инт . Как ведет себя анимация, когда она достигает конца анимации. Чтобы этот атрибут имел эффект, android:repeatCount должно быть установлено положительное целое число или "-1" . Установите значение "reverse" , чтобы анимация меняла направление на противоположное при каждой итерации, или "restart" чтобы каждый раз анимация повторялась с самого начала.
android:valueType
Ключевое слово . Не указывайте этот атрибут, если значением является цвет. Платформа анимации автоматически обрабатывает значения цвета.
Ценить Описание
intType Указывает, что анимированные значения являются целыми числами.
floatType (по умолчанию) Указывает, что анимированные значения являются плавающими.
<animator>
Выполняет анимацию в течение заданного периода времени. Представляет ValueAnimator .

Атрибуты:

android:valueTo
float, int или цвет . Необходимый . Значение, на котором заканчивается анимация. Цвета представлены в виде шестизначных шестнадцатеричных чисел, например #333333.
android:valueFrom
float, int или color . Необходимый . Значение, с которого начинается анимация. Цвета представлены в виде шестизначных шестнадцатеричных чисел, например #333333.
android:duration
инт . Время анимации в миллисекундах. 300 мс — значение по умолчанию.
android:startOffset
инт . Количество миллисекунд, в течение которых анимация задерживается после start() .
android:repeatCount
инт . Сколько раз повторять анимацию. Установите значение "-1" для бесконечного повторения или положительное целое число. Например, значение "1" означает, что анимация повторяется один раз после первого запуска анимации, поэтому анимация воспроизводится в общей сложности два раза. Значение по умолчанию — "0" , что означает отсутствие повторения.
android:repeatMode
инт . Как ведет себя анимация, когда она достигает конца анимации. Чтобы этот атрибут имел эффект, android:repeatCount должно быть установлено положительное целое число или "-1" . Установите значение "reverse" , чтобы анимация меняла направление на противоположное при каждой итерации, или "restart" чтобы каждый раз анимация повторялась с самого начала.
android:valueType
Ключевое слово . Не указывайте этот атрибут, если значением является цвет. Платформа анимации автоматически обрабатывает значения цвета.
Ценить Описание
intType Указывает, что анимированные значения являются целыми числами.
floatType (по умолчанию) Указывает, что анимированные значения являются плавающими.
пример:

XML-файл, сохраненный в res/animator/property_animator.xml :

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

Чтобы запустить эту анимацию, превратите ресурсы XML в своем коде в объект AnimatorSet , а затем установите целевые объекты для всех анимаций перед запуском набора анимаций. Вызов setTarget() для удобства устанавливает один целевой объект для всех дочерних элементов AnimatorSet . Следующий код показывает, как это сделать:

Котлин

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Ява

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
см. также:

Посмотреть анимацию

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

Подростковая анимация

Анимация, определенная в XML, которая выполняет переходы к графике, такие как вращение, затухание, перемещение и растяжение.

расположение файла:
res/anim/ filename .xml
Имя файла используется в качестве идентификатора ресурса.
тип данных скомпилированного ресурса:
Указатель ресурса на Animation
ссылка на ресурс:
На Java: R.anim. filename
В XML: @[ package :]anim/ filename
синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

Файл должен иметь один корневой элемент: элемент <alpha> , <scale> , <translate> , <rotate> или <set> , который содержит группу (или группы) других элементов анимации (включая вложенные <set> элементы).

элементы:
<set>
Контейнер, содержащий другие элементы анимации ( <alpha> , <scale> , <translate> , <rotate> ) или другие элементы <set> . Представляет AnimationSet .

Атрибуты:

android:interpolator
Ресурс интерполятора . Interpolator для применения к анимации. Значение должно быть ссылкой на ресурс, который определяет интерполятор, а не имя класса интерполятора. На платформе доступны ресурсы интерполятора по умолчанию, но вы можете создать свой собственный ресурс интерполятора. Дополнительную информацию об интерполяторах смотрите в следующем обсуждении.
android:shareInterpolator
Логическое значение . "true" если вы хотите использовать один и тот же интерполятор для всех дочерних элементов.
<alpha>
Анимация постепенного появления или исчезновения. Представляет AlphaAnimation .

Атрибуты:

android:fromAlpha
Плавать . Начальное смещение непрозрачности, где 0,0 — прозрачность, а 1,0 — непрозрачность.
android:toAlpha
Плавать . Конечное смещение непрозрачности, где 0,0 — прозрачность, а 1,0 — непрозрачность.

Дополнительные атрибуты, поддерживаемые <alpha> , см. в справочнике по классу Animation , атрибуты XML которого наследуются этим элементом.

<scale>
Анимация изменения размера. Вы можете указать центральную точку изображения, от которой оно будет расти наружу или внутрь, указав pivotX и pivotY . Например, если эти значения равны 0,0 (верхний левый угол), весь рост происходит вниз и вправо. Представляет ScaleAnimation .

Атрибуты:

android:fromXScale
Плавать . Начальное смещение размера X, где 1,0 — отсутствие изменений.
android:toXScale
Плавать . Конечное смещение размера X, где 1,0 — отсутствие изменений.
android:fromYScale
Плавать . Начальное смещение размера Y, где 1,0 — отсутствие изменений.
android:toYScale
Плавать . Конечное смещение размера Y, где 1,0 — отсутствие изменений.
android:pivotX
Плавать . Координата X должна оставаться фиксированной при масштабировании объекта.
android:pivotY
Плавать . Координата Y должна оставаться фиксированной при масштабировании объекта.

Дополнительные атрибуты, поддерживаемые <scale> , см. в справочнике по классу Animation , атрибуты XML которого наследуются этим элементом.

<translate>
Вертикальное и/или горизонтальное движение. Представляет TranslateAnimation . Поддерживает следующие атрибуты в любом из этих трех форматов:
  • Значения от -100 до 100, оканчивающиеся на «%», обозначающие процент относительно самого себя.
  • Значения от -100 до 100, оканчивающиеся на «%p», обозначающие процент относительно родительского элемента.
  • Значение с плавающей запятой без суффикса, указывающее абсолютное значение.

Атрибуты:

android:fromXDelta
Плавающее или процентное значение . Начальное смещение по X. Выражается либо в пикселях относительно нормального положения, например "5" ; в процентах относительно ширины элемента, например "5%" ; или в процентах относительно ширины родительского элемента, например "5%p" .
android:toXDelta
Плавающее или процентное значение . Конечное смещение по X. Выражается либо в пикселях относительно нормального положения, например "5" ; в процентах относительно ширины элемента, например "5%" ; или в процентах относительно ширины родительского элемента, например "5%p" .
android:fromYDelta
Плавающее или процентное значение . Начальное смещение по оси Y. Выражается либо в пикселях относительно нормального положения, например "5" ; в процентах относительно высоты элемента, например "5%" ; или в процентах относительно высоты родителя, например "5%p" .
android:toYDelta
Плавающее или процентное значение . Конечное смещение по оси Y. Выражается либо в пикселях относительно нормального положения, например "5" ; в процентах относительно высоты элемента, например "5%" ; или в процентах относительно высоты родителя, например "5%p" .

Дополнительные атрибуты, поддерживаемые <translate> , см. в справочнике по классу Animation , атрибуты XML которого наследуются этим элементом.

<rotate>
Анимация вращения. Представляет RotateAnimation .

Атрибуты:

android:fromDegrees
Плавать . Начальное угловое положение, в градусах.
android:toDegrees
Плавать . Конечное угловое положение, в градусах.
android:pivotX
Плавающее или процентное значение . Координата X центра вращения. Выражается либо в пикселях относительно левого края объекта, например "5" ; в процентах относительно левого края объекта, например "5%" ; или в процентах относительно левого края родительского контейнера, например "5%p" .
android:pivotY
Плавающее или процентное значение . Координата Y центра вращения. Выражается либо в пикселях относительно верхнего края объекта, например "5" ; в процентах относительно верхнего края объекта, например "5%" ; или в процентах относительно верхнего края родительского контейнера, например "5%p" .

Дополнительные атрибуты, поддерживаемые <rotate> , см. в справочнике по классу Animation , атрибуты XML которого наследуются этим элементом.

пример:

XML-файл, сохраненный в res/anim/hyperspace_jump.xml :

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

Следующий код приложения применяет анимацию к ImageView и запускает анимацию:

Котлин

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Ява

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
см. также:

Интерполяторы

Интерполятор — это модификатор анимации, определенный в XML, который влияет на скорость изменения анимации. Это позволяет ускорять, замедлять, повторять, отражать существующие эффекты анимации и т. д.

Интерполятор применяется к элементу анимации с помощью атрибута android:interpolator , значением которого является ссылка на ресурс интерполятора.

Все интерполяторы, доступные в Android, являются подклассами класса Interpolator . Для каждого класса интерполятора Android включает общедоступный ресурс, на который вы можете ссылаться, чтобы применить интерполятор к анимации, используя атрибут android:interpolator . В следующей таблице указан ресурс, который будет использоваться для каждого интерполятора:

Класс интерполятора Идентификатор ресурса
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

Вот как вы можете применить один из них с помощью атрибута android:interpolator :

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

Пользовательские интерполяторы

Если вас не устраивают интерполяторы, предоставляемые платформой, вы можете создать собственный ресурс интерполятора с измененными атрибутами. Например, вы можете настроить скорость ускорения для AnticipateInterpolator или количество циклов для CycleInterpolator . Для этого вы создаете собственный ресурс интерполятора в XML-файле.

расположение файла:
res/anim/ filename .xml
Имя файла используется в качестве идентификатора ресурса.
тип данных скомпилированного ресурса:
Указатель ресурса на соответствующий объект интерполятора
ссылка на ресурс:
В XML: @[ package :]anim/ filename
синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

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

элементы:
Обратите внимание, что каждая реализация Interpolator , определённая в XML, имеет имя, начинающееся со строчной буквы.

<accelerateDecelerateInterpolator>
Скорость изменений начинается и заканчивается медленно, но к середине ускоряется.

Никаких атрибутов.

<accelerateInterpolator>
Скорость изменений начинается медленно, затем ускоряется.

Атрибуты:

android:factor
Плавать . Скорость ускорения. Значение по умолчанию — 1.
<anticipateInterpolator>
Изменение начинается назад, а затем переходит вперед.

Атрибуты:

android:tension
Плавать . Величина приложенного напряжения. Значение по умолчанию — 2.
<anticipateOvershootInterpolator>
Изменение начинается назад, затем перемещается вперед и выходит за пределы целевого значения, а затем стабилизируется на конечном значении.

Атрибуты:

android:tension
Плавать . Величина приложенного напряжения. Значение по умолчанию — 2.
android:extraTension
Плавать . Сумма, на которую умножается напряжение. По умолчанию — 1,5.
<bounceInterpolator>
Изменение отскакивает в конце.

Нет атрибутов

<cycleInterpolator>
Повторяет анимацию указанное количество циклов. Скорость изменения имеет синусоидальный характер.

Атрибуты:

android:cycles
Целое число . Количество циклов. Значение по умолчанию — 1.
<decelerateInterpolator>
Скорость изменений начинается быстро, затем замедляется.

Атрибуты:

android:factor
Плавать . Скорость замедления. Значение по умолчанию — 1.
<linearInterpolator>
Скорость изменения постоянна.

Никаких атрибутов.

<overshootInterpolator>
Изменение перемещается вперед и превышает последнее значение, а затем возвращается обратно.

Атрибуты:

android:tension
Плавать . Величина приложенного напряжения. Значение по умолчанию — 2.
пример:

XML-файл, сохраненный в res/anim/my_overshoot_interpolator.xml :

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

В этом XML-анимации применяется интерполятор:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Кадровая анимация

Анимация, определенная в XML, которая показывает последовательность изображений по порядку, как в фильме.

расположение файла:
res/drawable/ filename .xml
Имя файла используется в качестве идентификатора ресурса.
тип данных скомпилированного ресурса:
Указатель ресурса на AnimationDrawable
ссылка на ресурс:
В Java: R.drawable. filename
В XML: @[ package :]drawable. filename
синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
элементы:
<animation-list>
Необходимый . Это должен быть корневой элемент. Содержит один или несколько элементов <item> .

Атрибуты:

android:oneshot
Логическое значение . "true" если вы хотите выполнить анимацию один раз; "false" для зацикливания анимации.
<item>
Один кадр анимации. Должен быть дочерним элементом элемента <animation-list> .

Атрибуты:

android:drawable
Рисуемый ресурс . Рисуемый объект, который будет использоваться для этого кадра.
android:duration
Целое число . Продолжительность показа этого кадра в миллисекундах.
пример:

XML-файл сохранен в res/drawable/rocket_thrust.xml :

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

Следующий код приложения устанавливает анимацию в качестве фона для View , а затем воспроизводит анимацию:

Котлин

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Ява

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
см. также: