Bei der 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. Die Animation hat ein anfängliches Momentum, das hauptsächlich von der Geschwindigkeit der Geste bestimmt wird, 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.

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 wie folgt zu Ihrem Projekt hinzufügen:
- Öffnen Sie die Datei
build.gradle
für Ihr App-Modul. - 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 Klasse FlingAnimation
können Sie eine Fling-Animation für ein Objekt erstellen. Um eine Fling-Animation zu erstellen, erstellen Sie eine Instanz der Klasse FlingAnimation
und geben Sie ein Objekt und die Eigenschaft des Objekts an, die animiert werden soll.
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 am Anfang 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 nehmen. Wenn Sie einen festen Wert angeben möchten, sollten Sie ihn in dp pro Sekunde definieren und dann in Pixel pro Sekunde umrechnen. 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 Umrechnen der Startgeschwindigkeit in Pixel pro Sekunde finden Sie im Abschnitt dp pro Sekunde in Pixel pro Sekunde umrechnen unter Federanimation.
Rufen Sie die Methode setStartVelocity()
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 Klassen GestureDetector.OnGestureListener
und VelocityTracker
, um die Geschwindigkeit von Touch-Gesten abzurufen bzw. zu berechnen.
Animationswertebereich 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 Fling-Animation den Minimal- oder Maximalwert erreicht, wird die Animation beendet.
Rufen Sie die Methoden setMinValue()
und setMaxValue()
auf, um die Mindest- und Höchstwerte festzulegen.
Bei beiden Methoden wird das Animations-Objekt zurückgegeben, 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 am Anfang der Animation nicht 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 Wisch. Die vom Geschwindigkeits-Tracker erfasste Geschwindigkeit ist velocityX
und 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();
Mindestsichtbarkeitsä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 aus 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
undSCROLL_Y
. - Bei Animationen, bei denen eine Drehung verwendet wird, z. B.
ROTATION
,ROTATION_X
undROTATION_Y
, beträgt die minimale sichtbare ÄnderungMIN_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.
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 Sichtbarkeit oder einen Wert, den Sie für eine benutzerdefinierte Eigenschaft berechnen müssen. Weitere Informationen zur Berechnung dieses Werts finden Sie im Abschnitt Mindestwert für 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 ein benutzerdefiniertes Attribut animieren, das nicht in Pixeln definiert ist.
Berechnung eines minimal sichtbaren Änderungswerts
Verwenden Sie die folgende Formel, um den Mindestwert für sichtbare Änderungen für eine benutzerdefinierte Property zu berechnen:
Minimale sichtbare Änderung = Bereich des benutzerdefinierten Attributwerts / Bereich der Animation in Pixeln
Die Property, die animiert werden soll, ändert sich beispielsweise von 0 auf 100. Das entspricht einer Änderung von 200 Pixeln. Gemäß der Formel beträgt der minimale sichtbare Änderungswert 100 / 200 = 0, 5 Pixel.