Zasób animacji może definiować jeden z dwóch typów animacji:
- Animacja właściwości
- Tworzy animację przez zmianę wartości właściwości obiektu w ustalonym okresie za pomocą
Animator
. - Wyświetl animację
-
Istnieją 2 rodzaje animacji dostępne w ramach platformy wyświetlania animacji:
- Animacja tween: tworzy animację przez wykonanie serii przekształceń jednego obrazu z
Animation
. - Animacja klatki: tworzy animację, wyświetlając sekwencję obrazów w kolejności od
AnimationDrawable
.
- Animacja tween: tworzy animację przez wykonanie serii przekształceń jednego obrazu z
Animacja właściwości
Animacja zdefiniowana w pliku XML, która w ustalonym czasie zmienia właściwości obiektu docelowego, takie jak kolor tła lub wartość alfa.
- lokalizacja pliku:
res/animator/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.- typ danych skompilowanych zasobów:
- Wskaźnik zasobu do
ValueAnimator
,ObjectAnimator
lubAnimatorSet
- odniesienie do zasobów:
-
W kodzie opartym na Javie lub Kotlin:
R.animator.filename
W formacie XML:@[package:]animator/filename
- składnia:
-
<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>
Plik musi zawierać 1 element główny:
<set>
,<objectAnimator>
lub<valueAnimator>
. Elementy animacji możesz grupować razem w elemencie<set>
, m.in. w innych elementach<set>
. - elementy:
- przykład:
-
Plik XML zapisany
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>
Aby uruchomić tę animację, przed rozpoczęciem zestawu animacji ustaw zasoby XML w swoim kodzie do obiektu
AnimatorSet
, a następnie ustaw obiekty docelowe dla wszystkich animacji. WywołaniesetTarget()
ustawia jako wygodę jeden obiekt docelowy dla wszystkich elementów podrzędnych obiektuAnimatorSet
. Poniższy kod pokazuje, jak to zrobić: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();
- zobacz też:
-
- Omówienie animacji właściwości
- Wersje demonstracyjne interfejsu API z przykładami wykorzystania systemu animacji właściwości
Wyświetl animację
Platforma animacji widoku obsługuje zarówno animacje klatka po klatce, które są zadeklarowane w formacie XML. Poniżej znajdziesz informacje o korzystaniu z obu tych metod.
Animacja starszego typu
Animacja zdefiniowana w formacie XML, która wykonuje przejścia w grafice, takie jak obracanie, zanikanie, ruch i rozciąganie.
- lokalizacja pliku:
res/anim/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.- typ danych skompilowanych zasobów:
- Wskaźnik zasobu do
Animation
- odniesienie do zasobów:
-
W Javie:
R.anim.filename
W pliku XML:@[package:]anim/filename
- składnia:
-
<?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>
Plik musi zawierać 1 element główny: element
<alpha>
,<scale>
,<translate>
,<rotate>
lub<set>
, który zawiera grupę (lub grupy) innych elementów animacji (w tym zagnieżdżone elementy<set>
). - elementy:
- przykład:
-
Plik XML zapisany
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>
Ten kod aplikacji stosuje animację do obiektu
ImageView
i uruchamia ją: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); - zobacz też:
Interpolatory
Interpolator to modyfikator animacji zdefiniowany w pliku XML, który wpływa na szybkość zmian w animacji. Umożliwia to przyspieszanie, zwalnianie, powtarzanie, odrzucanie itd. istniejących efektów animacji.
Do elementu animacji z atrybutem android:interpolator
stosowany jest interpolator, którego wartość jest odwołaniem do zasobu interpolatora.
Wszystkie interpolatory dostępne w Androidzie należą do podklas klasy Interpolator
. W przypadku każdej klasy interpolatora Android zawiera zasób publiczny, do którego możesz się odwołać, aby zastosować interpolator do animacji przy użyciu atrybutu android:interpolator
.
Poniższa tabela określa zasób, który będzie używany dla każdego interpolatora:
Klasa interpolatora | Identyfikator zasobu |
---|---|
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 |
Oto, jak możesz zastosować jedną z nich za pomocą atrybutu android:interpolator
:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Niestandardowe interpolatory
Jeśli interpolatory dostarczane przez platformę nie spełniają Twoich oczekiwań, możesz utworzyć zasób interpolatora niestandardowego ze zmodyfikowanymi atrybutami.
Możesz na przykład dostosować tempo przyspieszenia dla funkcji AnticipateInterpolator
lub liczbę cykli dla elementu CycleInterpolator
. Aby to zrobić, trzeba utworzyć w pliku XML własny zasób interpolatora.
- lokalizacja pliku:
res/anim/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.- typ danych skompilowanych zasobów:
- Wskaźnik zasobu do odpowiedniego obiektu interpolatora
- odniesienie do zasobów:
-
W formacie XML:
@[package:]anim/filename
- składnia:
-
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />
Jeśli nie zastosujesz żadnych atrybutów, interpolator będzie działać dokładnie tak samo jak funkcje podane przez platformę (wymienione w poprzedniej tabeli).
- elementy:
- Zwróć uwagę, że każda implementacja
Interpolator
, po zdefiniowaniu w pliku XML, ma nazwę zaczynającą się od małej litery. - przykład:
-
Plik XML zapisany
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" />
W tym pliku XML animacji stosowany jest interpolator:
<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" />
Animacja klatki
Animacja zdefiniowana w języku XML, która przedstawia sekwencję obrazów w określonej kolejności, tak jak w przypadku filmu.
- lokalizacja pliku:
res/drawable/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.- typ danych skompilowanych zasobów:
- Wskaźnik zasobu do
AnimationDrawable
- odniesienie do zasobów:
-
W Javie:
R.drawable.filename
W pliku XML:@[package:]drawable.filename
- składnia:
-
<?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>
- elementy:
- przykład:
-
Plik XML zapisany
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>
Ten kod aplikacji ustawia animację jako tło dla elementu
View
, a następnie ją odtwarza:Kotlin
val rocketImage: ImageView = findViewById(R.id.rocket_image) rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust) val rocketAnimation = rocketImage.background
if (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()
; } - zobacz też: