Animation ansehen

Mit dem Ansichtsanimationssystem können Sie angepasste Animationen in Ansichten ausführen. Bei Tween-Animationen wird die Animation anhand von Informationen wie Startpunkt, Endpunkt, Größe, Drehung und anderen gemeinsamen Aspekten einer Animation berechnet.

Mit einer Tween-Animation können Sie eine Reihe einfacher Transformationen (Position, Größe, Drehung und Transparenz) für den Inhalt eines View-Objekts ausführen. Wenn Sie also ein TextView-Objekt haben, können Sie den Text verschieben, drehen, vergrößern oder verkleinern. Wenn ein Hintergrundbild vorhanden ist, wird dieses zusammen mit dem Text umgewandelt. Der animation package stellt alle Klassen bereit, die in einer Animation der Tween-Version verwendet werden.

Die Tween-Animation wird durch eine Folge von Animationsanweisungen definiert, die entweder durch XML- oder Android-Code definiert ist. Wie bei der Definition eines Layouts wird auch eine XML-Datei empfohlen, da sie im Vergleich zur Hartcodierung der Animation besser lesbar, wiederverwendbar und anpassbar ist. Im folgenden Beispiel verwenden wir XML. Weitere Informationen zum Definieren einer Animation in Ihrem Anwendungscode anstelle von XML finden Sie in der AnimationSet-Klasse und anderen abgeleiteten Animation-Klassen.

In der Animationsanleitung wird definiert, welche Transformationen Sie ausführen möchten, wann sie stattfinden und wie lange es dauert, bis sie angewendet werden. Transformationen können sequenziell oder gleichzeitig erfolgen. Beispielsweise können Sie den Inhalt einer TextView von links nach rechts drehen und dann um 180 Grad drehen oder den Text gleichzeitig verschieben und drehen. Jede Transformation verwendet eine Reihe von Parametern speziell für die jeweilige Transformation (Start- und Endgröße für Größenänderung, Start- und Endwinkel für Drehung usw.) sowie eine Reihe allgemeiner Parameter (z. B. Startzeit und Dauer). Damit mehrere Transformationen gleichzeitig ausgeführt werden, geben Sie ihnen dieselbe Startzeit. Damit sie sequenziell erfolgen, berechnen Sie die Startzeit plus die Dauer der vorherigen Transformation.

Die Animations-XML-Datei befindet sich im Verzeichnis res/anim/ Ihres Android-Projekts. Die Datei muss ein einzelnes Stammelement haben: entweder ein einzelnes <alpha>-, <scale>-, <translate>-, <rotate>-, Interpolator- oder <set>-Element, das Gruppen dieser Elemente enthält, zu denen auch ein weiteres <set>-Element gehören kann. Standardmäßig werden alle Animationsanweisungen gleichzeitig angewendet. Damit sie nacheinander erfolgen, musst du das Attribut startOffset angeben, wie im folgenden Beispiel gezeigt.

Der folgende XML-Code aus einer der ApiDemos wird verwendet, um ein View-Objekt zu dehnen 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) sind oben links (0,0) und werden nach unten und nach rechts immer größer.

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 zu sich selbst.

Sie können festlegen, wie eine Transformation im Laufe der Zeit angewendet wird, indem Sie eine Interpolator zuweisen. Android umfasst mehrere Interpolator-Unterklassen, die verschiedene Geschwindigkeitskurven angeben. AccelerateInterpolator weist beispielsweise eine Transformation an, langsam und schneller zu beginnen. Jede 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, verweist der folgende Code darauf und wendet sie auf ein ImageView-Objekt aus dem Layout an.

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 Animation.setStartTime() eine Startzeit für die Animation definieren und die Animation dann der Ansicht mit View.setAnimation() zuweisen.

Weitere Informationen zur XML-Syntax, zu den verfügbaren Tags und Attributen finden Sie unter Animationsressourcen.

Hinweis:Unabhängig davon, wie die Animation verschoben oder in ihrer Größe angepasst werden kann, werden die Grenzen der Ansicht, die die Animation enthält, nicht automatisch entsprechend angepasst. Die Animation wird trotzdem über die Begrenzung der Ansicht hinaus gezeichnet und nicht abgeschnitten. Wenn die Animation jedoch die Grenzen der übergeordneten Ansicht überschreitet, wird sie abgeschnitten.