Ansichten mit einer Schlauchanimation verschieben

Schreiben Sie jetzt
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Weitere Informationen zur Verwendung von Animationen in „Compose“

Bei ziehbasierten Animationen wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Verwenden Sie sie, um eine Eigenschaft eines Objekts zu animieren und die Animation schrittweise zu beenden. Sie hat einen ersten Impuls, der hauptsächlich von der Geschwindigkeit der Geste empfangen wird und allmählich verlangsamt wird. Die Animation endet, wenn die Geschwindigkeit so niedrig ist, dass keine sichtbare Änderung auf dem Gerätebildschirm vorgenommen wird.

Abbildung 1. Wischen (Animation)

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

AndroidX-Bibliothek hinzufügen

Wenn du die physikbasierten Animationen verwenden möchtest, musst du deinem Projekt die AndroidX-Bibliothek so hinzufügen:

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

    Cool

            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 Fling-Animation für ein Objekt erstellen. Um eine Fling-Animation zu erstellen, erstellen Sie eine Instanz der FlingAnimation-Klasse und geben ein Objekt und die zugehörige Eigenschaft an, die animiert werden sollen.

Kotlin

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

Java

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

Geschwindigkeit einstellen

Die Startgeschwindigkeit definiert die Geschwindigkeit, mit der sich eine Animationseigenschaft zu Beginn der Animation ändert. Die Standardstartgeschwindigkeit ist auf null Pixel pro Sekunde eingestellt. Sie müssen daher eine Startgeschwindigkeit festlegen, damit die Animation nicht sofort endet.

Sie können einen festen Wert als Startgeschwindigkeit verwenden oder sich an der Geschwindigkeit einer Berührung orientieren. Wenn Sie einen festen Wert angeben möchten, sollten Sie den Wert in dp pro Sekunde definieren und ihn dann in Pixel pro Sekunde umwandeln. Wenn du den Wert in dp pro Sekunde angibst, ist die Geschwindigkeit unabhängig von der Dichte und den Formfaktoren eines Geräts. Weitere Informationen zum Umwandeln der Startgeschwindigkeit in Pixel pro Sekunde finden Sie im Abschnitt dp pro Sekunde in Pixel pro Sekunde konvertieren des Artikels Spring Animation.

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

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

Wertebereich für Animation festlegen

Sie können die minimalen und maximalen Animationswerte festlegen, wenn Sie den Attributwert auf einen bestimmten Bereich beschränken möchten. Diese Bereichssteuerung ist besonders nützlich, wenn Sie Eigenschaften animieren, die einen unveränderlichen Bereich haben, z. B. „Alpha“ (von 0 bis 1).

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

Zum Festlegen der Mindest- und Höchstwerte rufen Sie die Methoden setMinValue() bzw. setMaxValue() auf. 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 keine Reibung am Anfang der Animation festlegen, wird für die Animation ein Standardwert von 1 für die Reibung verwendet.

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

Beispielcode

Das folgende Beispiel zeigt ein horizontales Fling. Die vom Geschwindigkeitstracker erfasste Geschwindigkeit beträgt velocityX. Die Scrollgrenzen sind auf 0 und maxScroll festgelegt. Die Hürde ist auf 1.1 eingestellt.

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. Er legt einen angemessenen Grenzwert für das Beenden der Animation fest.

Bei der Animation von DynamicAnimation.ViewProperty muss diese Methode nicht aufgerufen werden, da die minimale sichtbare Änderung von der Property abgeleitet wird. Beispiel:

  • Der Mindestwert für sichtbare Änderungen beträgt standardmäßig 1 Pixel für Ansichtsattribute wie TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X und SCROLL_Y.
  • Bei Animationen mit Rotation, 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 mit Deckkraft ist die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ALPHA oder 1/256.

Wenn Sie die minimale sichtbare Änderung für eine Animation festlegen möchten, rufen Sie die Methode setMinimumVisibleChange() auf und übergeben Sie entweder eine der minimalen sichtbaren Konstanten oder einen Wert, den Sie für eine benutzerdefinierte Eigenschaft berechnen müssen. Weitere Informationen zum Berechnen dieses Werts finden Sie im Abschnitt Minimalen Wert für sichtbare Änderungen 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.

Mindestwert für sichtbare Änderung berechnen

Mit der folgenden Formel können Sie den Mindestwert für sichtbare Änderungen für eine benutzerdefinierte Eigenschaft berechnen:

Minimale sichtbare Änderung = Bereich des Werts der benutzerdefinierten Eigenschaft / Animationsbereich in Pixeln

Beispielsweise ändert sich die Eigenschaft, die Sie animieren möchten, von 0 auf 100. Das entspricht einer Veränderung um 200 Pixel. Gemäß der Formel beträgt der Mindestwert für sichtbare Änderungen 100 / 200 entspricht 0, 5 Pixeln.