Eine Animationsressource kann einen von zwei Animationstypen definieren:
- Eigenschaftsanimation
- Erstellt eine Animation, indem die Attributwerte eines Objekts über einen bestimmten Zeitraum geändert werden
mit
Animator
. - Animation ansehen
-
Mit dem Framework für Animationen können Sie zwei Arten von Animationen ausführen:
- Tween-Animation: Erstellt eine Animation durch eine Reihe von Transformationen an einem einzelnen Bild.
mit einem
Animation
. - Frame-Animation: Damit wird eine Animation erstellt, indem eine Reihe von Bildern nacheinander wiedergegeben wird.
mit einem
AnimationDrawable
.
- Tween-Animation: Erstellt eine Animation durch eine Reihe von Transformationen an einem einzelnen Bild.
mit einem
Eigenschaftsanimation
Eine in XML definierte Animation, die die Eigenschaften des Zielobjekts ändert, z. B. Hintergrundfarbe oder Alphawert über einen festgelegten Zeitraum hinweg.
- Dateispeicherort:
res/animator/filename.xml
Der Dateiname wird als Ressourcen-ID verwendet.- Datentyp der kompilierten Ressource:
- Ressourcenzeiger auf
ValueAnimator
,ObjectAnimator
, oderAnimatorSet
- Ressourcenreferenz:
-
Im Java- oder Kotlin-Code:
R.animator.filename
XML:@[package:]animator/filename
- Syntax:
-
<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>
Die Datei muss ein einzelnes Stammelement haben: entweder
<set>
,<objectAnimator>
oder<valueAnimator>
. Sie können Animationselemente einschließlich anderer Elemente im<set>
-Element gruppieren<set>
-Elemente. - Elemente:
- Beispiel:
-
XML-Datei gespeichert unter
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>
Erhöhen Sie zum Ausführen dieser Animation die XML-Ressourcen in Ihrem Code in ein
AnimatorSet
-Objekt und legen Sie dann die Zielobjekte für alle Animationen fest. bevor der Animationssatz gestartet wird. Durch den Aufruf vonsetTarget()
wird der Einfachheit halber ein einzelnes Zielobjekt für alle untergeordneten Elemente vonAnimatorSet
festgelegt. Der folgende Code zeigt, wie dies funktioniert: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();
- Siehe auch:
-
- Property-Animation – Übersicht
- API-Demos als Beispiele wie Sie das Eigenschaftsanimationssystem
Animation ansehen
Das Framework für Ansichtsanimationen unterstützt sowohl Tween- als auch Frame-by-Frame-Animationen, die beide deklariert sind. in XML vorliegen. In den folgenden Abschnitten wird die Verwendung beider Methoden beschrieben.
Animation für ältere Kinder
Eine in XML definierte Animation, die Übergänge in einer Grafik ausführt, z. B. das Drehen, Verblassen, Bewegen und Dehnen.
- Dateispeicherort:
res/anim/filename.xml
Der Dateiname wird als Ressourcen-ID verwendet.- Datentyp der kompilierten Ressource:
- Ressourcenzeiger auf ein
Animation
- Ressourcenreferenz:
-
In Java:
R.anim.filename
XML:@[package:]anim/filename
- Syntax:
-
<?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>
Die Datei muss ein einzelnes Stammelement haben: entweder ein
<alpha>
,<scale>
,<translate>
<rotate>
- oder<set>
-Element, das Eine oder mehrere Gruppen anderer Animationselemente, einschließlich verschachtelter<set>
-Elemente. - Elemente:
- Beispiel:
-
XML-Datei gespeichert unter
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>
Mit dem folgenden Anwendungscode wird die Animation auf ein
ImageView
- und startet die Animation: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); - Siehe auch:
Interpolatoren
Ein Interpolator ist ein in XML definierter Animationsmodifikator, der die Änderungsrate in einem Animation. So können Sie Ihre vorhandenen Animationseffekte beschleunigen, verlangsamen, wiederholen abgesprungen usw.
Ein Interpolator wird auf ein Animationselement mit der android:interpolator
angewendet.
-Attribut, dessen Wert ein Verweis auf eine Interpolatorressource ist.
Alle in Android verfügbaren Interpolatoren sind Unterklassen der Interpolator
-Klasse. Für jede Interpolatorklasse wird Android
enthält eine öffentliche Ressource, auf die Sie verweisen können, um den Interpolator auf eine Animation anzuwenden
mit dem Attribut android:interpolator
.
Die folgende Tabelle gibt die Ressource an, die für jeden Interpolator verwendet werden soll:
Interpolator-Klasse | Ressourcen-ID |
---|---|
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 |
So wenden Sie eine dieser Optionen mit dem Attribut android:interpolator
an:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Benutzerdefinierte Interpolatoren
Wenn Sie mit den von der Plattform bereitgestellten Interpolatoren nicht zufrieden sind, können Sie eine benutzerdefinierte Interpolatorressource mit geänderten Attributen erstellen.
Beispielsweise können Sie die Rate der
Beschleunigung für AnticipateInterpolator
oder passen Sie die Anzahl der
Zyklen für CycleInterpolator
. Dazu müssen Sie
Erstellen Sie Ihre eigene Interpolator-Ressource in einer XML-Datei.
- Dateispeicherort:
res/anim/filename.xml
Der Dateiname wird als Ressourcen-ID verwendet.- Datentyp der kompilierten Ressource:
- Ressourcenzeiger auf das entsprechende Interpolatorobjekt
- Ressourcenreferenz:
-
XML:
@[package:]anim/filename
- Syntax:
-
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />
Wenn Sie keine Attribute anwenden, funktioniert der Interpolator genau wie die von der Plattform bereitgestellt werden (siehe Tabelle oben).
- Elemente:
- Beachten Sie, dass jede
Interpolator
-Implementierung, der in XML definiert ist, einen Namen hat, der mit einem Kleinbuchstaben beginnt. - Beispiel:
-
XML-Datei gespeichert unter
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" />
Diese Animations-XML wendet den Interpolator an:
<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" />
Frame animation
Eine in XML definierte Animation, die wie ein Film eine Folge von Bildern zeigt.
- Dateispeicherort:
res/drawable/filename.xml
Der Dateiname wird als Ressourcen-ID verwendet.- Datentyp der kompilierten Ressource:
- Ressourcenzeiger auf ein
AnimationDrawable
- Ressourcenreferenz:
-
In Java:
R.drawable.filename
XML:@[package:]drawable.filename
- Syntax:
-
<?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>
- Elemente:
- Beispiel:
-
XML-Datei gespeichert unter
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>
Mit dem folgenden Anwendungscode wird die Animation als Hintergrund für ein
View
festgelegt, und dann die Animation abspielen: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()
; } - Siehe auch: