Mit dem Ansichtsanimationssystem können Sie Zwischenanimationen für Ansichten ausführen. Bei der Zwischenanimation wird die Animation anhand von Informationen wie Start- und Endpunkt, Größe, Drehung und anderen gängigen Aspekten einer Animation berechnet.
Eine Tween-Animation kann eine Reihe einfacher Transformationen (Position, Größe, Rotation und Transparenz) des Inhalts eines View-Objekts durchführen. Wenn Sie also ein TextView
-Objekt haben, können Sie den Text verschieben, drehen, vergrößern oder verkleinern. Wenn es ein Hintergrundbild hat, wird das Hintergrundbild zusammen mit dem Text transformiert. Die animation package
enthält alle Klassen, die in einer Zwischenanimation verwendet werden.
Die Zwischenanimation wird durch eine Abfolge von Animationsanweisungen definiert, die entweder in XML oder in Android-Code geschrieben sind. Wie beim Definieren eines Layouts wird eine XML-Datei empfohlen, da sie besser lesbar, wiederverwendbar und austauschbar ist als die harte Codierung der Animation. Im folgenden Beispiel verwenden wir XML. Weitere Informationen zum Definieren einer Animation im Anwendungscode anstelle von XML finden Sie in der AnimationSet
-Klasse und anderen abgeleiteten Animation
-Klassen.
In der Anleitung für die Animation werden die gewünschten Transformationen, die Zeiträume, in denen sie stattfinden sollen, und die Dauer der Anwendung festgelegt. Transformationen können sequenziell oder gleichzeitig erfolgen. So können Sie beispielsweise den Inhalt einer TextView von links nach rechts bewegen und dann um 180 Grad drehen oder den Text gleichzeitig bewegen und drehen. Für jede Transformation werden eine Reihe von Parametern verwendet, die für diese Transformation spezifisch sind (Start- und Endgröße für die Größenänderung, Start- und Endwinkel für die Drehung usw.), sowie eine Reihe gängiger Parameter (z. B. Startzeit und Dauer). Wenn mehrere Transformationen gleichzeitig erfolgen sollen, geben Sie ihnen dieselbe Startzeit. Wenn sie nacheinander erfolgen sollen, berechnen Sie die Startzeit zuzüglich der Dauer der vorangehenden Transformation.
Die XML-Datei der Animation gehört in das Verzeichnis res/anim/
Ihres Android-Projekts. Die Datei muss ein einzelnes Stammelement haben: Dabei handelt es sich entweder um ein einzelnes <alpha>
-, <scale>
-, <translate>
-, <rotate>
-, Interpolator- oder <set>
-Element, das Gruppen dieser Elemente enthält (was ein weiteres <set>
enthalten kann). Standardmäßig werden alle Animationsanweisungen gleichzeitig angewendet. Wenn sie nacheinander auftreten sollen, müssen Sie das startOffset
-Attribut angeben, wie im Beispiel unten gezeigt.
Der folgende XML-Code aus einem der ApiDemos wird verwendet, um ein View-Objekt zu strecken und dann gleichzeitig zu drehen und zu drehen.
<set 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/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
Die Bildschirmkoordinaten (in diesem Beispiel nicht verwendet) beginnen links oben bei (0,0) und steigen nach unten und rechts an.
Einige Werte, z. B. „pivotX“, können relativ zum Objekt selbst oder relativ zum übergeordneten Element angegeben werden. Achten Sie darauf, das richtige Format zu verwenden: „50“ für 50 % relativ zum übergeordneten Element oder „50 %“ für 50 % relativ zum Element selbst.
Sie können festlegen, wie eine Transformation im Zeitverlauf angewendet wird, indem Sie eine Interpolator
zuweisen. Android umfasst mehrere abgeleitete Interpolator-Klassen, die verschiedene Geschwindigkeitskurven angeben. Beispielsweise weist AccelerateInterpolator
einer Transformation an, langsam zu starten und zu beschleunigen. Jedes hat einen Attributwert, der in der XML-Datei angewendet werden kann.
Wenn diese XML-Datei als hyperspace_jump.xml
im Verzeichnis res/anim/
des Projekts gespeichert ist, wird im folgenden Code darauf verwiesen und sie wird auf ein ImageView
-Objekt aus dem Layout angewendet.
Kotlin
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
Java
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
Alternativ zu startAnimation()
können Sie mit
einen Startzeitpunkt für die Animation definieren und die Animation dann mit Animation.setStartTime()
der Ansicht zuweisen.View.setAnimation()
Weitere Informationen zur XML-Syntax sowie zu verfügbaren Tags und Attributen finden Sie unter Animationsressourcen.
Hinweis: Unabhängig davon, wie sich die Animation bewegt oder ihre Größe ändert, werden die Grenzen der Ansicht, in der sich die Animation befindet, nicht automatisch angepasst. Die Animation wird dennoch außerhalb ihrer Ansicht gezeichnet und nicht abgeschnitten. Es wird jedoch abgeschnitten, wenn die Animation die Grenzen der übergeordneten Ansicht überschreitet.