L'animation basée sur le glissement utilise une force de frottement proportionnelle à la vitesse d'un objet. Utilisez-le pour animer une propriété d'un objet et arrêter progressivement l'animation. Elle présente un élan initial, provenant principalement de la vitesse du geste, et ralentit progressivement. L'animation se termine lorsque sa vitesse est suffisamment faible pour qu'elle n'entraîne aucune modification visible sur l'écran de l'appareil.
![](https://developer.android.com/static/images/guide/topics/graphics/fling-animation.gif?authuser=5&hl=fr)
Pour en savoir plus sur des sujets associés, consultez les guides suivants:
Ajouter la bibliothèque AndroidX
Pour utiliser les animations basées sur la physique, vous devez ajouter la bibliothèque AndroidX à votre projet comme suit:
- Ouvrez le fichier
build.gradle
du module de votre application. - Ajoutez la bibliothèque AndroidX à la section
dependencies
.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Créer une animation de glissement d'un geste vif
La classe FlingAnimation
vous permet de créer une animation de déplacement pour un objet. Pour créer une animation de glissement, créez une instance de la classe FlingAnimation
, puis fournissez un objet et la propriété de l'objet que vous souhaitez animer.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Définir la vitesse
La vitesse de départ définit la vitesse à laquelle une propriété d'animation change au début de l'animation. La vitesse de démarrage par défaut est définie sur zéro pixel par seconde. Par conséquent, vous devez définir une vitesse de début pour vous assurer que l'animation ne se termine pas immédiatement.
Vous pouvez utiliser une valeur fixe comme vitesse de départ ou la baser sur la vitesse d'un geste tactile. Si vous choisissez de fournir une valeur fixe, vous devez définir la valeur en dp par seconde, puis la convertir en pixels par seconde. Définir la valeur en dp par seconde permet à la vitesse d'être indépendante de la densité et des facteurs de forme d'un appareil. Pour en savoir plus sur la conversion de la vitesse de départ en pixels par seconde, reportez-vous à la section Convertir des dp par seconde en pixels par seconde dans Spring Animation.
Pour définir la vitesse, appelez la méthode setStartVelocity()
et indiquez la vitesse en pixels par seconde. La méthode renvoie l'objet de glissement d'un geste vif sur lequel la vitesse est définie.
Remarque:Utilisez les classes GestureDetector.OnGestureListener
et VelocityTracker
pour récupérer et calculer la vitesse des gestes tactiles, respectivement.
Définir une plage de valeurs d'animation
Vous pouvez définir les valeurs minimale et maximale d'animation lorsque vous souhaitez limiter la valeur de la propriété à une certaine plage. Cette commande de plage est particulièrement utile lorsque vous animez des propriétés ayant une plage intrinsèque, comme alpha (de 0 à 1).
Remarque: Lorsque la valeur d'une animation de glissement atteint la valeur minimale ou maximale, l'animation se termine.
Pour définir les valeurs minimale et maximale, appelez respectivement les méthodes setMinValue()
et setMaxValue()
.
Les deux méthodes renvoient l'objet d'animation pour lequel vous avez défini la valeur.
Définir des points de friction
La méthode setFriction()
vous permet de modifier le niveau de friction de l'animation. Il définit la vitesse à laquelle la vitesse diminue dans une animation.
Remarque: Si vous ne définissez pas le niveau de friction au début de l'animation, celle-ci utilise une valeur par défaut de 1.
La méthode renvoie l'objet dont l'animation utilise la valeur de friction que vous fournissez.
Exemple de code
L'exemple ci-dessous illustre un glissement horizontal. La vitesse capturée par l'outil de suivi de la vitesse est de velocityX
, et les limites de défilement sont définies sur 0 et maxScroll. Le niveau de friction est défini sur 1,1.
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();
Définir la modification visible minimale
Lorsque vous animez une propriété personnalisée qui n'est pas définie en pixels, vous devez définir le changement minimal de valeur d'animation visible par les utilisateurs. Elle détermine un seuil raisonnable pour terminer l'animation.
Il n'est pas nécessaire d'appeler cette méthode lors de l'animation de DynamicAnimation.ViewProperty
, car la modification visible minimale est dérivée de la propriété. Par exemple :
- La valeur de modification visible minimale par défaut est de 1 pixel pour les propriétés de vue telles que
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
etSCROLL_Y
. - Pour les animations qui utilisent la rotation, telles que
ROTATION
,ROTATION_X
etROTATION_Y
, la variation minimale visible estMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, soit 1/10 pixel. - Pour les animations qui utilisent l'opacité, la modification visible minimale est
MIN_VISIBLE_CHANGE_ALPHA
, soit 1/256.
Pour définir la variation minimale visible d'une animation, appelez la méthode setMinimumVisibleChange()
et transmettez l'une des constantes visibles minimales ou une valeur que vous devez calculer pour une propriété personnalisée. Pour plus d'informations sur le calcul de cette valeur, consultez la section Calculer une valeur de modification visible minimale.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Remarque: Vous ne devez transmettre une valeur que lorsque vous animez une propriété personnalisée qui n'est pas définie en pixels.
Calculer une valeur de variation visible minimale
Pour calculer la valeur de variation minimale visible d'une propriété personnalisée, utilisez la formule suivante:
Variation visible minimale = Plage de valeurs de la propriété personnalisée / Plage d'animations en pixels
Par exemple, la propriété que vous souhaitez animer passe de 0 à 100. Cela correspond à une variation de 200 pixels. Conformément à la formule, la valeur de variation visible minimale est 100 / 200 = 0,5 pixel.