Ansichten mit einer Schlauchanimation verschieben

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie Animationen in Compose verwenden.

Bei einer Fling-basierten Animation wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Damit können Sie ein Attribut eines Objekts animieren und die Animation schrittweise beenden. Sie hat einen anfänglichen Impuls, der hauptsächlich von der Geschwindigkeit der Geste abhängt, und wird allmählich langsamer. Die Animation endet, wenn die Geschwindigkeit der Animation so gering ist, dass auf dem Display des Geräts keine sichtbare Änderung mehr zu sehen ist.

Abbildung 1: Fling-Animation

Weitere Informationen zu verwandten Themen finden Sie in den folgenden Leitfäden:

AndroidX-Bibliothek hinzufügen

Wenn Sie die physikbasierten Animationen verwenden möchten, müssen Sie die AndroidX-Bibliothek so zu Ihrem Projekt hinzufügen:

  1. Öffnen Sie die Datei build.gradle für Ihr App-Modul.
  2. Fügen Sie die AndroidX-Bibliothek dem Abschnitt dependencies hinzu.

    Groovy

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    Kotlin

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

Fling-Animation erstellen

Mit der Klasse FlingAnimation können Sie eine Wisch-Animation für ein Objekt erstellen. Wenn Sie eine Schleuderanimation erstellen möchten, erstellen Sie eine Instanz der Klasse FlingAnimation und geben Sie ein Objekt und das Attribut des Objekts an, das Sie animieren möchten.

Kotlin

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);

Geschwindigkeit festlegen

Die Startgeschwindigkeit definiert die Geschwindigkeit, mit der sich eine Animationseigenschaft zu Beginn der Animation ändert. Die Standard-Anfangsgeschwindigkeit ist auf null Pixel pro Sekunde festgelegt. Daher müssen Sie eine Startgeschwindigkeit definieren, damit die Animation nicht sofort endet.

Sie können einen festen Wert als Startgeschwindigkeit verwenden oder die Geschwindigkeit einer Touch-Geste als Grundlage verwenden. Wenn du einen festen Wert angibst, solltest du den Wert in dp pro Sekunde definieren und dann in Pixel pro Sekunde umrechnen. Wenn der Wert in dp pro Sekunde definiert wird, ist die Geschwindigkeit unabhängig von der Dichte und den Formfaktoren eines Geräts. Weitere Informationen zum Umrechnen der Startgeschwindigkeit in Pixel pro Sekunde findest du im Abschnitt dp pro Sekunde in Pixel pro Sekunde umrechnen unter Federnde Animation.

Rufen Sie die Methode setStartVelocity() auf und übergeben Sie die Geschwindigkeit in Pixeln pro Sekunde, um die Geschwindigkeit festzulegen. Die Methode gibt das Fling-Objekt zurück, für das die Geschwindigkeit festgelegt ist.

Hinweis: Verwende die Klassen GestureDetector.OnGestureListener und VelocityTracker, um die Geschwindigkeit von Touch-Gesten abzurufen bzw. zu berechnen.

Wertebereich für die Animation festlegen

Sie können die Mindest- und Höchstwerte für die Animation festlegen, wenn Sie den Attributwert auf einen bestimmten Bereich beschränken möchten. Diese Bereichssteuerung ist besonders nützlich, wenn Sie Attribute mit einem inhärenten Bereich animieren, z. B. Alpha (von 0 bis 1).

Hinweis: Wenn der Wert einer Fling-Animation den Mindest- oder Höchstwert erreicht, endet die Animation.

Rufen Sie die Methode setMinValue() bzw. setMaxValue() auf, um die Mindest- und Höchstwerte festzulegen. Beide Methoden geben das Animationsobjekt zurück, für das Sie den Wert festgelegt haben.

Reibung festlegen

Mit der Methode setFriction() können Sie die Reibung der Animation ändern. Sie definiert, wie schnell die Geschwindigkeit in einer Animation abnimmt.

Hinweis: Wenn Sie die Reibung nicht am Anfang der Animation festlegen, wird ein Standardwert von 1 verwendet.

Die Methode gibt das Objekt zurück, dessen Animation den von Ihnen angegebenen Reibungswert verwendet.

Beispielcode

Das folgende Beispiel zeigt eine horizontale Wischbewegung. Die vom VelocityTracker erfasste Geschwindigkeit ist velocityX und die Scrollgrenzen sind auf 0 und maxScroll festgelegt. Die Reibung ist auf 1,1 festgelegt.

Kotlin

FlingAnimation(view, DynamicAnimation.SCROLL_X).apply {
    setStartVelocity(-velocityX)
    setMinValue(0f)
    setMaxValue(maxScroll)
    friction = 1.1f
    start()
}

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
fling.setStartVelocity(-velocityX)
        .setMinValue(0)
        .setMaxValue(maxScroll)
        .setFriction(1.1f)
        .start();

Mindestwert für sichtbare Änderung festlegen

Wenn Sie eine benutzerdefinierte Eigenschaft animieren, die nicht in Pixeln definiert ist, sollten Sie die minimale Änderung des Animationswerts festlegen, die für Nutzer sichtbar ist. Sie bestimmt einen angemessenen Schwellenwert für das Beenden der Animation.

Es ist nicht erforderlich, diese Methode aufzurufen, wenn DynamicAnimation.ViewProperty animiert wird, da die minimale sichtbare Änderung vom Attribut abgeleitet wird. Beispiel:

  • Der standardmäßige Mindestwert für sichtbare Änderungen beträgt 1 Pixel für Ansichtseigenschaften wie TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X und SCROLL_Y.
  • Bei Animationen, die eine Drehung verwenden, z. B. ROTATION, ROTATION_X und ROTATION_Y, beträgt die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ROTATION_DEGREES oder 1/10 Pixel.
  • Bei Animationen, die die Deckkraft verwenden, beträgt die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ALPHA oder 1/256.

Wenn du die minimale sichtbare Änderung für eine Animation festlegen möchtest, rufe die Methode setMinimumVisibleChange() auf und übergib entweder eine der Konstanten für die minimale Sichtbarkeit oder einen Wert, den du für eine benutzerdefinierte Eigenschaft berechnen musst. Weitere Informationen zur Berechnung dieses Werts finden Sie im Abschnitt Wert für die minimale sichtbare Änderung berechnen.

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

Java

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

Hinweis: Sie müssen nur dann einen Wert übergeben, wenn Sie eine benutzerdefinierte Eigenschaft animieren, die nicht in Pixeln definiert ist.

Wert für die minimale sichtbare Änderung berechnen

Verwenden Sie die folgende Formel, um den Wert für die minimale sichtbare Änderung für eine benutzerdefinierte Eigenschaft zu berechnen:

Minimale sichtbare Änderung = Bereich des benutzerdefinierten Attributwerts / Bereich der Animation in Pixeln

Beispiel: Das Attribut, das Sie animieren möchten, wird von 0 auf 100 erhöht. Das entspricht einer Änderung um 200 Pixel. Gemäß der Formel beträgt der Mindestwert für sichtbare Änderungen 100 ÷ 200 = 0, 5 Pixel.