Animation ansehen

Jetpack Compose
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zum Verwenden von Animationen in Compose

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

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.