Mit dem System für Ansichtsanimationen können Sie Tween-Animationen auf Ansichten anwenden. Bei einer Tween-Animation werden die Animationen anhand von Informationen wie Startpunkt, Endpunkt, Größe, Drehung und anderen üblichen Aspekten einer Animation berechnet.
Mit einer Tween-Animation können eine Reihe einfacher Transformationen (Position, Größe, Drehung,
und Transparenz) auf die Inhalte eines Ansichtsobjekts angewendet werden. Wenn Sie also ein TextView-Objekt haben, können Sie den Text verschieben, drehen, vergrößern oder verkleinern. Wenn ein
Hintergrundbild vorhanden ist, wird es zusammen mit dem Text transformiert. Das animation package enthält alle Klassen, die in einer Tween-Animation verwendet werden.
Eine Tween-Animation wird durch eine Folge von Animationsanweisungen definiert, die entweder in XML oder in
Android-Code angegeben werden. Wie beim Definieren eines Layouts wird eine XML-Datei empfohlen, da sie lesbarer,
wiederverwendbarer und austauschbarer ist als eine hartcodierte 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 Animation Unterklassen.
Die Animationsanweisungen definieren die Transformationen, die ausgeführt werden sollen, wann sie ausgeführt werden und wie lange sie dauern sollen. Transformationen können sequenziell oder gleichzeitig erfolgen . Sie können beispielsweise festlegen, dass sich die Inhalte eines TextView-Objekts von links nach rechts bewegen und dann um 180 Grad gedreht werden, oder dass sich der Text gleichzeitig bewegt und gedreht wird. Jede Transformation erfordert eine Reihe von Parametern, die für diese Transformation spezifisch sind (z. B. Start- und Endgröße für eine Größen änderung oder Start- und Endwinkel für eine Drehung), sowie eine Reihe allgemeiner Parameter (z. B. Startzeit und Dauer). Wenn mehrere Transformationen gleichzeitig erfolgen sollen, geben Sie für sie dieselbe Startzeit an. Wenn sie sequenziell erfolgen sollen, berechnen Sie die Startzeit plus die Dauer der vorherigen Transformation.
Die XML-Datei für die Animation gehört in das Verzeichnis res/anim/ Ihres Android
Projekts. Die Datei muss ein einzelnes Stammelement haben. Dabei kann es sich um ein einzelnes
<alpha>, <scale>, <translate>,
<rotate>- oder Interpolator-Element oder ein <set>-Element handeln, das
Gruppen dieser Elemente enthält (einschließlich eines weiteren <set>-Elements). Standardmäßig werden alle
Animationsanweisungen gleichzeitig angewendet. Wenn sie sequenziell erfolgen sollen, müssen Sie
das startOffset Attribut angeben, wie im folgenden Beispiel gezeigt.
Das folgende XML aus einer der ApiDemos wird verwendet, um ein Ansichtsobjekt zu dehnen und dann gleichzeitig zu drehen und zu rotieren.
<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) sind (0,0) in der oberen linken Ecke und nehmen nach unten und rechts zu.
Einige Werte wie pivotX können relativ zum Objekt selbst oder relativ zum übergeordneten Element angegeben werden. Achten Sie darauf, das richtige Format für das gewünschte Ergebnis zu verwenden („50“ für 50% relativ zum übergeordneten Element, oder „50 %“ für 50% relativ zum Objekt selbst).
Sie können festlegen, wie eine Transformation im Laufe der Zeit angewendet wird, indem Sie einen Interpolator zuweisen. Android enthält mehrere Interpolator-Unterklassen, die
verschiedene Geschwindigkeitskurven angeben. Mit AccelerateInterpolator
wird beispielsweise festgelegt, dass eine Transformation langsam beginnt und dann schneller wird. Jede Unterklasse 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 eine Startzeit für die
Animation definieren und die Animation dann mit Animation.setStartTime() der Ansicht zuweisen.View.setAnimation()
Weitere Informationen zur XML-Syntax und zu verfügbaren Tags und Attributen finden Sie unter Animationsressourcen.
Hinweis: Unabhängig davon, wie sich Ihre Animation bewegt oder wie groß sie ist, werden die Grenzen der Ansicht, die die Animation enthält, nicht automatisch angepasst. Die Animation wird jedoch weiterhin über die Grenzen der Ansicht hinaus gezeichnet und nicht abgeschnitten. Ein Abschneiden erfolgt jedoch, wenn die Animation die Grenzen der übergeordneten Ansicht überschreitet.