Ansichten mit einer Schlauchanimation verschieben

Compose-Methode verwenden
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Weitere Informationen

Bei einer Fling-basierten Animation wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Damit können Sie eine Eigenschaft eines Objekts animieren und die Animation allmählich beenden. Sie hat einen anfänglichen Impuls, der hauptsächlich von der Geschwindigkeit der Touchgeste stammt, und verlangsamt sich allmählich. Die Animation endet, wenn die Geschwindigkeit der Animation so niedrig ist, dass sie keine sichtbare Änderung auf dem Gerätebildschirm mehr bewirkt.

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 Ihrem Projekt die AndroidX-Bibliothek wie folgt 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 FlingAnimation Klasse können Sie eine Fling-Animation für ein Objekt erstellen. Erstellen Sie dazu eine Fling-Animation, erstellen Sie eine Instanz der FlingAnimation Klasse 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 festlegen

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 Startgeschwindigkeit verwenden oder ihn auf der Geschwindigkeit einer Touch-Geste basieren. Wenn Sie einen festen Wert angeben, sollten Sie ihn in dp pro Sekunde definieren und dann in Pixel pro Sekunde umwandeln. Wenn Sie den Wert in dp 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 pro Sekunde in Pixel pro Sekunde umwandeln“ unter Federanimation.

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

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

Bereich für Animationswerte festlegen

Sie können die Mindest- und Höchstwerte für die Animation festlegen, wenn Sie den Wert der Eigenschaft auf einen bestimmten Bereich beschränken möchten. Diese Bereichssteuerung ist besonders nützlich, wenn Sie Eigenschaften animieren, die einen intrinsischen Bereich haben, 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 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 setFriction() Methode 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 veranschaulicht einen horizontalen Fling. Die vom Geschwindigkeits-Tracker 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();

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. Dadurch wird ein angemessener Schwellenwert für das Beenden der Animation festgelegt.

Es ist nicht erforderlich, diese Methode aufzurufen, wenn Sie DynamicAnimation.ViewProperty animieren, da die minimale sichtbare Änderung von der Eigenschaft abgeleitet wird. Beispiel:

  • Der Standardwert für die minimale sichtbare Änderung 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.

Rufen Sie die setMinimumVisibleChange() Methode auf und übergeben Sie entweder eine der Konstanten für die minimale sichtbare Änderung oder einen Wert, den Sie berechnen müssen für eine benutzerdefinierte Eigenschaft, um die minimale sichtbare Änderung für eine Animation festzulegen. Weitere Informationen zum Berechnen dieses Werts finden Sie im Abschnitt Mindestsichtbare Änderung berechnen.

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

Java

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

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

Mindestsichtbare Änderung berechnen

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

Mindestsichtbare Änderung = Bereich des benutzerdefinierten Eigenschaftswerts / Bereich der Animation in Pixeln

Angenommen, die Eigenschaft, die Sie animieren möchten, verläuft von 0 bis 100. Das entspricht einer Änderung von 200 Pixeln. Gemäß der Formel beträgt die minimale sichtbare Änderung 100 / 200 = 0, 5 Pixel.