Ansichten mit einer Schlauchanimation verschieben

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

Bei ziehbasierten Animationen wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Mit dieser Funktion können Sie eine Eigenschaft eines Objekts animieren und die Animation nach und nach 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 der Animation so niedrig ist, dass keine sichtbare Änderung auf dem Gerätebildschirm zu sehen ist.

Abbildung 1. Wischen (Animation)

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

AndroidX-Bibliothek hinzufügen

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

  1. Öffnen Sie die build.gradle-Datei 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 Wischanimation für ein Objekt erstellen. Wenn Sie eine Wischanimation erstellen möchten, erstellen Sie eine Instanz der Klasse FlingAnimation und geben Sie ein Objekt und die Eigenschaft des Objekts an, die Sie animieren möchten.

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 festgelegt. Daher müssen Sie eine Startgeschwindigkeit definieren, damit die Animation nicht sofort endet.

Sie können einen festen Wert als Anfangsgeschwindigkeit verwenden oder sie anhand der Geschwindigkeit einer Touch-Geste festlegen. Wenn Sie einen festen Wert angeben, sollten Sie ihn in Pixeln pro Sekunde definieren und dann in Pixel pro Sekunde umrechnen. Wenn Sie den Wert in Pixeln pro Sekunde definieren, 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/s in Pixel/s umwandeln im Artikel Federanimation.

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

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

Bereich für Animationswerte festlegen

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

Hinweis: Wenn der Wert einer Wischanimation den Minimal- oder Maximalwert erreicht, endet die Animation.

Rufen Sie die Methoden setMinValue() und 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 zu Beginn der Animation festlegen, wird der Standardwert „1“ verwendet.

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

Beispielcode

Das folgende Beispiel zeigt einen horizontalen Wisch. Die vom Geschwindigkeitstracker erfasste Geschwindigkeit beträgt velocityX. Die Scrollgrenzen sind auf 0 und maxScroll festgelegt. Die Reibung 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();

Mindestsichtbare Ä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 Grenzwert für das Ende der Animation.

Diese Methode muss nicht aufgerufen werden, wenn DynamicAnimation.ViewProperty animiert wird, da die minimale sichtbare Änderung aus der Property abgeleitet wird. Beispiel:

  • Der Standardwert für die Mindeständerung, die sichtbar ist, beträgt 1 Pixel für Ansichtseigenschaften wie TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X und SCROLL_Y.
  • Bei Animationen mit Drehung, z. B. ROTATION, ROTATION_X und ROTATION_Y, beträgt die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ROTATION_DEGREES, also 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 Konstanten für die minimale sichtbare Änderung oder einen Wert, den Sie für eine benutzerdefinierte Property berechnen müssen. Weitere Informationen zur Berechnung dieses Werts finden Sie im Abschnitt Minimalen sichtbaren Änderungswert 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 Property animieren, die nicht in Pixeln definiert ist.

Mindestwert für sichtbare Änderung berechnen

Verwenden Sie die folgende Formel, um den minimalen sichtbaren Änderungswert für eine benutzerdefinierte Property zu 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 Änderung von 200 Pixeln. Gemäß der Formel beträgt die minimale sichtbare Änderung 100 ÷ 200 = 0, 5 Pixel.