Zasób animacji może definiować jeden z 2 typów animacji:
- Animacja właściwości
- Tworzy animację, modyfikując wartości właściwości obiektu w określonym czasie.
dzięki
Animator
. - Wyświetl animację
-
Za pomocą struktury animacji widoku możesz tworzyć 2 rodzaje animacji:
- Animacja starszych dzieci: tworzy animację, wykonując serię przekształceń pojedynczego obrazu
dzięki
Animation
. - Animacja klatki: tworzy animację, pokazując sekwencję obrazów w określonej kolejności.
dzięki
AnimationDrawable
.
- Animacja starszych dzieci: tworzy animację, wykonując serię przekształceń pojedynczego obrazu
dzięki
Animacja właściwości
Animacja zdefiniowana w pliku XML, która modyfikuje właściwości obiektu docelowego, takie jak koloru tła lub wartości alfa w określonym czasie.
- lokalizacja pliku:
- ) Nazwa pliku jest używana jako identyfikator zasobu.
- skompilowany typ danych zasobu:
- wskaźnik zasobu
ValueAnimator
,ObjectAnimator
, lubAnimatorSet
- odniesienie do zasobu:
-
W kodzie w języku Java lub Kotlin:
R.animator.filename
W pliku 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 mieć jeden element główny:
<set>
,<objectAnimator>
lub<valueAnimator>
. Dostępne opcje grupować elementy animacji razem w elemencie<set>
, w tym<set>
elementów. - elementy:
- przykład:
-
Plik XML zapisany w lokalizacji
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ę, rozszerz zasoby XML w swoim kodzie do obiektu
AnimatorSet
, a następnie ustaw obiekty docelowe dla wszystkich animacji przed uruchomieniem zestawu animacji. WywołaniesetTarget()
ustawia dla wszystkich użytkowników jeden obiekt docelowy dla wszystkich elementów podrzędnych obiektuAnimatorSet
. 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 obiektu
- Wersje demonstracyjne API (przykłady) jak korzystać z systemu animacji właściwości,
res/animator/filename.xml
(Wyświetl animację
Platforma animacji widoku danych obsługuje zarówno animacje pośrednie, jak i klatki poklatkowe, które są zadeklarowane w pliku XML. W sekcjach poniżej opisujemy, jak używać obu metod.
Animacja starszych dzieci
Animacja zdefiniowana w pliku XML, która wykonuje przejścia na obrazie, takie jak obracanie, blaknięcie, poruszanie się i rozciąganie.
- lokalizacja pliku:
- ) Nazwa pliku jest używana jako identyfikator zasobu.
- skompilowany typ danych zasobu:
- Wskaźnik zasobu
Animation
- odniesienie do zasobu:
-
W języku Java:
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 mieć jeden element główny:
<alpha>
,<scale>
,<translate>
<rotate>
lub<set>
element, który zawiera grupa (lub grupy) innych elementów animacji (w tym zagnieżdżonych elementów<set>
). - elementy:
- przykład:
-
Plik XML zapisany w lokalizacji
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 elementów
ImageView
i rozpoczyna animację: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ż:
res/anim/filename.xml
(Interpolatory
Interpolator to zdefiniowany w kodzie XML modyfikator animacji, który wpływa na szybkość zmian w funkcji animację. Umożliwia to przyspieszenie, spowolnienie, powtórzenie istniejących efektów animacji, odesłana itd.
Interpolator jest stosowany do elementu animacji za pomocą funkcji android:interpolator
, którego wartość jest odwołaniem do zasobu interpolatora.
Wszystkie interpolatory dostępne na Androidzie są podklasami klasy Interpolator
. Dla każdej klasy interpolatora Android
zawiera publiczny zasób, do którego możesz się odwołać, aby zastosować interpolator do animacji
za pomocą atrybutu android:interpolator
.
Tabela poniżej zawiera zasoby, które mają być używane dla poszczególnych interpolatorów:
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 |
Aby zastosować jeden z nich za pomocą atrybutu android:interpolator
:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Niestandardowe interpolatory
Jeśli platforma interpolatora nie spełnia Twoich oczekiwań, możesz utworzyć niestandardowy zasób interpolatora ze zmodyfikowanymi atrybutami.
Możesz na przykład dostosować stawkę
przyspieszenie dla AnticipateInterpolator
lub dostosuj liczbę
dla cyklu CycleInterpolator
. W tym celu
utworzyć własny zasób interpolatora w pliku XML.
- lokalizacja pliku:
- ) Nazwa pliku jest używana jako identyfikator zasobu.
- skompilowany typ danych zasobu:
- Wskaźnik zasobu do odpowiedniego obiektu interpolatora
- odniesienie do zasobu:
-
W pliku 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ć tak samo jak tych dostępnych na platformie, które zostały wymienione w poprzedniej tabeli.
- elementy:
- Zauważ, że każda implementacja
Interpolator
, zdefiniowane w pliku XML, ma nazwę rozpoczynającą się od małej litery. - przykład:
-
Plik XML zapisany w lokalizacji
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" />
Ten kod XML animacji stosuje 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" />
res/anim/filename.xml
(Animacja klatki
Animacja zdefiniowana w pliku XML, która pokazuje sekwencję obrazów w ustalonej kolejności, jak w filmie.
- lokalizacja pliku:
- ) Nazwa pliku jest używana jako identyfikator zasobu.
- skompilowany typ danych zasobu:
- Wskaźnik zasobu
AnimationDrawable
- odniesienie do zasobu:
-
W języku Java:
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 w lokalizacji
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
View
: i odtwórz animację: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ż:
res/drawable/filename.xml
(