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.
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:
- Ö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 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_XundSCROLL_Y. - Bei Animationen, die eine Drehung verwenden, 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.
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.