Ansichten mit einer Schlauchanimation verschieben

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

Bei ziehbasierten Animationen wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Hiermit können Sie eine Eigenschaft eines Objekts animieren und die Animation schrittweise beenden. Es hat einen anfänglichen Impuls, der hauptsächlich von der Gestengeschwindigkeit empfangen wird, und verlangsamt sich schrittweise. Die Animation endet, wenn die Geschwindigkeit so niedrig ist, dass auf dem Gerätebildschirm keine Veränderung zu sehen ist.

Abbildung 1: Ziehbewegungen

Weitere Informationen zu ähnlichen 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 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.

    Groovig

            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 Schleuderanimation für ein Objekt erstellen. Um eine Floh-Animation zu erstellen, erstellen Sie eine Instanz der FlingAnimation-Klasse und geben ein Objekt sowie die Objekteigenschaft an, die animiert werden soll.

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 standardmäßige Startgeschwindigkeit ist auf null Pixel pro Sekunde festgelegt. Daher muss eine Startgeschwindigkeit definiert werden, damit die Animation nicht sofort endet.

Du kannst einen festen Wert als Startgeschwindigkeit verwenden oder auf der Geschwindigkeit einer Touch-Geste basieren. Wenn Sie einen festen Wert angeben möchten, sollten Sie den Wert in dp pro Sekunde definieren und ihn dann in Pixel pro Sekunde konvertieren. Wenn der Wert in dp pro Sekunde definiert wird, ist die Geschwindigkeit unabhängig von der Dichte und dem Formfaktor 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 in Spring Animation.

Um die Geschwindigkeit festzulegen, rufen Sie die Methode setStartVelocity() auf und übergeben Sie die Geschwindigkeit in Pixeln pro Sekunde. Die Methode gibt das fling-Objekt zurück, auf 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 Animationen festlegen

Sie können die Mindest- und Höchstwerte für die Animation festlegen, wenn Sie den Eigenschaftswert 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 Ziehanimation den Mindest- oder Höchstwert erreicht, endet die Animation.

Rufen Sie zum Festlegen des Mindest- und Höchstwerts die Methoden setMinValue() bzw. setMaxValue() auf. Bei beiden Methoden wird das Animationsobjekt zurückgegeben, für das Sie den Wert festgelegt haben.

Reibungspunkte schaffen

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

Hinweis: Wenn Sie am Anfang der Animation kein Reibungselement festlegen, wird für die Animation der Standard-Reibungswert 1 verwendet.

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

Beispielcode

Das Beispiel unten zeigt eine horizontale Ziehbewegung. Die vom Geschwindigkeitstracker erfasste Geschwindigkeit beträgt velocityX und die Scroll-Grenzen werden 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();

Minimale sichtbare Änderung festlegen

Wenn Sie eine benutzerdefinierte Eigenschaft animieren, die nicht in Pixeln definiert ist, legen Sie die minimale Änderung des Animationswerts fest, der für Nutzer sichtbar ist. Er legt einen angemessenen Grenzwert für das Ende 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 Standardwert für die minimale sichtbare Änderung ist 1 Pixel für Ansichtseigenschaften wie TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X und SCROLL_Y.
  • Bei Animationen mit Rotation wie ROTATION, ROTATION_X und ROTATION_Y beträgt die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ROTATION_DEGREES bzw. 1/10 Pixel.
  • Bei Animationen mit Deckkraft beträgt die minimale sichtbare Änderung MIN_VISIBLE_CHANGE_ALPHA oder 1/256.

Um die minimale sichtbare Änderung für eine Animation festzulegen, rufen Sie die Methode setMinimumVisibleChange() auf und übergeben Sie entweder eine der minimal 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 sichtbaren Änderungswert berechnen.

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

Java

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

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

Minimale sichtbare Änderung berechnen

Verwenden Sie die folgende Formel, um den minimalen sichtbaren Änderungswert für eine benutzerdefinierte Eigenschaft zu berechnen:

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

Beispiel: Für die Property, die Sie animieren möchten, geht der Wert von 0 bis 100 über. Dies entspricht einer Änderung von 200 Pixeln. Gemäß der Formel beträgt der Wert für die minimale sichtbare Änderung 100 / 200, was 0,5 Pixeln entspricht.