Ресурс анимации может определять один из двух типов анимации:
- Анимация свойств
- Создает анимацию, изменяя значения свойств объекта в течение заданного периода времени с помощью
Animator. - Посмотреть анимацию
-
С помощью фреймворка View Animation можно создавать анимации двух типов:
- Промежуточная анимация – создает анимацию, выполняя серию преобразований одного изображения с помощью
Animation. - Покадровая анимация – последовательный показ изображений с помощью
AnimationDrawable.
- Промежуточная анимация – создает анимацию, выполняя серию преобразований одного изображения с помощью
Анимация свойств
Анимация, определенная в 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>. - elements:
- пример:
-
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. Ниже показано, как это сделать.Kotlin
val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator) .apply { setTarget(myObject) start() }
Java
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.animator.property_animator); set.setTarget(myObject); set.start();
- См. также:
-
- Общие сведения об анимации свойств
- Демонстрации API с примерами использования системы анимации свойств.
Посмотреть анимацию
Фреймворк анимации представлений поддерживает как промежуточную, так и покадровую анимацию, которые объявляются в 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>). - elements:
- пример:
-
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и запускается:Kotlin
val image: ImageView = findViewById(R.id.image) val hyperspaceJump: Animation = AnimationUtils.
loadAnimation(this, R.anim.hyperspace_jump) image.startAnimation(hyperspaceJump)Java
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" />
Если вы не примените никаких атрибутов, ваш интерполятор будет работать точно так же, как и те, которые предоставляются платформой и перечислены в предыдущей таблице.
- elements:
- Обратите внимание, что в XML-коде название каждой реализации
Interpolatorначинается со строчной буквы. - пример:
-
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>
- elements:
- пример:
-
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, а затем воспроизводится:Kotlin
val rocketImage: ImageView = findViewById(R.id.rocket_image) rocketImage.
setBackgroundResource(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.backgroundif (rocketAnimation isAnimatable) { rocketAnimation.start()}Java
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.
setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground(); if (rocketAnimation instanceofAnimatable) { ((Animatable)rocketAnimation).start(); } - См. также: