Bei einer Fling-basierten Animation wird eine Reibungskraft verwendet, die proportional zur Geschwindigkeit eines Objekts ist. Damit können Sie ein Attribut eines Objekts animieren und die Animation schrittweise beenden. Sie hat einen anfänglichen Impuls, der hauptsächlich von der Geschwindigkeit der Geste abhängt, und wird allmählich langsamer. Die Animation endet, wenn die Geschwindigkeit der Animation so gering ist, dass auf dem Display des Geräts keine sichtbare Änderung mehr zu sehen ist.
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 die AndroidX-Bibliothek so zu Ihrem Projekt hinzufügen:
- Öffnen Sie die Datei
build.gradlefür Ihr App-Modul. - Fügen Sie die AndroidX-Bibliothek dem Abschnitt
dependencieshinzu.Groovy
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 Wisch-Animation für ein Objekt erstellen. Wenn Sie eine Schleuderanimation erstellen möchten, erstellen Sie eine Instanz der Klasse FlingAnimation und geben Sie ein Objekt und das Attribut des Objekts an, das 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 Standard-Anfangsgeschwindigkeit 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 die Geschwindigkeit einer Touch-Geste als Grundlage verwenden. Wenn du einen festen Wert angibst, solltest du den Wert in dp pro Sekunde definieren und dann in Pixel pro Sekunde umrechnen. Wenn der Wert in dp pro Sekunde definiert wird, ist die Geschwindigkeit unabhängig von der Dichte und den Formfaktoren eines Geräts. Weitere Informationen zum Umrechnen der Startgeschwindigkeit in Pixel pro Sekunde findest du im Abschnitt dp pro Sekunde in Pixel pro Sekunde umrechnen unter Federnde Animation.
Rufen Sie die Methode setStartVelocity() auf und übergeben Sie die Geschwindigkeit in Pixeln pro Sekunde, um die Geschwindigkeit festzulegen. Die Methode gibt das Fling-Objekt zurück, für 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 die Animation festlegen
Sie können die Mindest- und Höchstwerte für die Animation festlegen, wenn Sie den Attributwert auf einen bestimmten Bereich beschränken möchten. Diese Bereichssteuerung ist besonders nützlich, wenn Sie Attribute mit einem inhärenten Bereich animieren, 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 Methode setMinValue() bzw. 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 am Anfang der Animation festlegen, wird ein Standardwert von 1 verwendet.
Die Methode gibt das Objekt zurück, dessen Animation den von Ihnen angegebenen Reibungswert verwendet.
Beispielcode
Das folgende Beispiel zeigt eine horizontale Wischbewegung. Die vom VelocityTracker 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();
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. Sie bestimmt einen angemessenen Schwellenwert für das Beenden der Animation.
Es ist nicht erforderlich, diese Methode aufzurufen, wenn DynamicAnimation.ViewProperty animiert wird, da die minimale sichtbare Änderung vom Attribut abgeleitet wird. Beispiel:
- Der standardmäßige Mindestwert für sichtbare Änderungen beträgt 1 Pixel für Ansichtseigenschaften wie
TRANSLATION_X,TRANSLATION_Y,TRANSLATION_Z,SCROLL_XundSCROLL_Y. - Bei Animationen, die eine Drehung verwenden, z. B.
ROTATION,ROTATION_XundROTATION_Y, beträgt die minimale sichtbare ÄnderungMIN_VISIBLE_CHANGE_ROTATION_DEGREESoder 1/10 Pixel. - Bei Animationen, die die Deckkraft verwenden, beträgt die minimale sichtbare Änderung
MIN_VISIBLE_CHANGE_ALPHAoder 1/256.
Wenn du die minimale sichtbare Änderung für eine Animation festlegen möchtest, rufe die Methode setMinimumVisibleChange() auf und übergib entweder eine der Konstanten für die minimale Sichtbarkeit oder einen Wert, den du für eine benutzerdefinierte Eigenschaft berechnen musst. Weitere Informationen zur Berechnung dieses Werts finden Sie im Abschnitt Wert für die minimale sichtbare Änderung 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.
Wert für die minimale sichtbare Änderung berechnen
Verwenden Sie die folgende Formel, um den Wert für die minimale sichtbare Änderung für eine benutzerdefinierte Eigenschaft zu berechnen:
Minimale sichtbare Änderung = Bereich des benutzerdefinierten Attributwerts / Bereich der Animation in Pixeln
Beispiel: Das Attribut, das Sie animieren möchten, wird von 0 auf 100 erhöht. Das entspricht einer Änderung um 200 Pixel. Gemäß der Formel beträgt der Mindestwert für sichtbare Änderungen 100 ÷ 200 = 0, 5 Pixel.