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“
<ph type="x-smartling-placeholder"></ph> Spring AnimationSpec →

Bei ziehbasierten Animationen wird eine Reibungskraft verwendet, die proportional zu einer die Geschwindigkeit des Objekts. Sie können damit eine Eigenschaft eines Objekts animieren und , um die Animation allmählich zu beenden. Sie hat einen ersten Impuls, meist von der Geschwindigkeit der Gesten empfangen, und verlangsamt sich allmählich. Die endet, wenn die Geschwindigkeit der Animation niedrig genug ist. dass keine Änderung auf dem Gerätebildschirm sichtbar ist.

<ph type="x-smartling-placeholder">
</ph>
Abbildung 1: Wischen (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 hinzufügen wie folgt:

  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 Fling-Animation für ein Objekt. Um eine Fling-Animation zu erstellen, erstellen Sie einen Instanz der FlingAnimation-Klasse und ein Objekt und die zugehörige Eigenschaft des Objekts angeben, das 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 eine Animationseigenschaft sich am Anfang der Animation ändert. Die Standardstartgeschwindigkeit ist auf null Pixel pro Sekunde eingestellt. Daher müssen Sie eine Startgeschwindigkeit damit die Animation nicht sofort endet.

Sie können einen festen Wert als Startgeschwindigkeit verwenden oder der Geschwindigkeit einer Berührung. Wenn Sie einen festen Wert angeben, definieren Sie den Wert in dp pro Sekunde und konvertieren ihn in Pixel. pro Sekunde. Wenn der Wert in dp pro Sekunde definiert wird, kann die Geschwindigkeit unabhängig von der Dichte und den Formfaktoren eines Geräts. Weitere Informationen zu die Startgeschwindigkeit in Pixel pro Sekunde umwandeln, Wird konvertiert „dp pro Sekunde“ zu „Pixel pro Sekunde“ in der Abbildung 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 in dem die Geschwindigkeit eingestellt ist.

Hinweis: Verwenden Sie die Methode GestureDetector.OnGestureListener und die VelocityTracker-Klassen zum Abrufen und Berechnen die Geschwindigkeit der Berührungsgesten.

Wertebereich für Animation festlegen

Sie können die minimalen und maximalen Animationswerte festlegen, den Eigenschaftswert auf einen bestimmten Bereich beschränken. Diese Bereichssteuerung ist besonders nützlich, wenn Sie Eigenschaften animieren, deren zum Beispiel Alpha (von 0 bis 1).

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

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

Reibung festlegen

Mit der Methode setFriction() können Sie und Reibungspunkte zu schaffen. Sie definiert, wie schnell die Geschwindigkeit in einer Animation abnimmt.

Hinweis: Wenn Sie die Hürde nicht am Anfang des der Animation einen Standardwert von 1 für die Reibung.

Die Methode gibt das Objekt zurück, dessen Animation den Reibungswert verwendet, den Sie bereitstellen.

Beispielcode

Das folgende Beispiel zeigt ein horizontales Fling. Die Geschwindigkeit, die von der lautet der Geschwindigkeits-Tracker velocityX und die Scroll-Grenzen sind auf 0 festgelegt und maxScroll. Die Hürde 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 Eine minimale Änderung des Animationswerts, der für die Nutzer sichtbar ist. Es legt einen angemessenen Schwellenwert für das Beenden der Animation fest.

Es ist nicht notwendig, diese Methode bei Animationen DynamicAnimation.ViewProperty, weil der die minimale sichtbare Änderung aus der Property abgeleitet wird. Beispiel:

  • Der Standardwert für die minimale sichtbare Änderung beträgt 1 Pixel für die Ansicht Attribute wie TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X und SCROLL_Y
  • Für Animationen mit Rotation wie ROTATION ROTATION_X und ROTATION_Y (mindestens sichtbar) Änderung MIN_VISIBLE_CHANGE_ROTATION_DEGREES oder 1/10 Pixel ist.
  • Bei Animationen mit Deckkraft ist die minimale Sichtbarkeitsänderung MIN_VISIBLE_CHANGE_ALPHA bzw. 1/256.

Um die minimale sichtbare Änderung für eine Animation festzulegen, rufen Sie die Methode setMinimumVisibleChange() und übergeben Sie entweder eine der minimalen sichtbaren Konstanten oder ein Wert, der berechnet werden muss für eine benutzerdefinierte Eigenschaft. Weitere Informationen zur Berechnung dieses Werts finden Sie in der Mindestwert 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 ein benutzerdefinierte Eigenschaft, die nicht in Pixeln definiert ist.

Mindestwert für sichtbare Änderung berechnen

Um den minimalen Wert für die sichtbare Änderung für eine benutzerdefinierte Eigenschaft zu berechnen, verwenden Sie die Methode folgende Formel:

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

Beispielsweise geht die Eigenschaft, die Sie animieren möchten, von 0 bis 100. Das entspricht einer Veränderung um 200 Pixel. Gemäß der Formel ist das Minimum Der Wert der sichtbaren Änderung beträgt 100 / 200 entspricht 0,5 Pixeln.