Déplacer des vues à l'aide d'une animation de déplacement

Essayer Compose
Jetpack Compose est le kit d'outils d'interface utilisateur recommandé pour Android. Découvrez comment utiliser des animations dans Compose.
<ph type="x-smartling-placeholder"></ph> Spring AnimationSpec →

L'animation par glissement utilise une force de frottement proportionnelle à la vitesse d'un objet. Utilisez-le pour animer une propriété d'objet pour terminer progressivement l'animation. Elle connaît un élan initial, provenant principalement de la vitesse du geste et ralentit progressivement. La L'animation se termine lorsque sa vitesse est suffisamment faible. qu'elle n'apporte aucune modification visible sur l'écran de l'appareil.

Figure 1. Animation de glissement

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:

  1. Ouvrez le fichier build.gradle du module de votre application.
  2. 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 glissement d'un objet. Pour créer une animation de glissement, créez un une instance de la classe FlingAnimation et indiquent un objet et sa propriété 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épart par défaut est défini sur 0 pixel par seconde. Vous devez donc définir une vitesse de début pour s'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 de la vitesse d'un geste tactile. Si vous choisissez de fournir une valeur fixe, définissez la valeur en dp par seconde, puis convertissez-la en pixels par seconde. Définir la valeur en dp par seconde permet indépendamment de la densité et des facteurs de forme d'un appareil. Pour en savoir plus sur conversion de la vitesse de départ en pixels par seconde, reportez-vous au Conversion dp par seconde à pixels par seconde, Animation de rétroaction.

Pour définir la vitesse, appelez la méthode setStartVelocity() et transmettez la vitesse en pixels par seconde. La méthode renvoie l'objet de déplacement pour laquelle la vitesse est définie.

Remarque:Utilisez le GestureDetector.OnGestureListener et les 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. Ce sélecteur de plage est particulièrement utile lorsque vous animez des propriétés ayant , par exemple alpha (de 0 à 1).

Remarque: Lorsque la valeur d'une animation de glissement d'un geste vif atteint la la valeur minimale ou maximale, l'animation se termine.

Pour définir les valeurs minimale et maximale, appelez la méthode setMinValue(). et setMaxValue(), respectivement. 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 la taille de l'animation de friction. Il définit la vitesse à laquelle la vitesse diminue dans une animation.

Remarque: Si vous ne définissez pas le niveau de fluidité au début de la l'animation, celle-ci utilise une valeur de friction par défaut de 1.

La méthode renvoie l'objet dont l'animation utilise la valeur de friction que vous que vous fournissez.

Exemple de code

L'exemple ci-dessous illustre un glissement horizontal. La vitesse capturée l'outil de suivi de la vitesse est velocityX et les limites de défilement sont défini 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 la un changement minimal de la valeur de l'animation visible par les utilisateurs. Il détermine un seuil raisonnable pour terminer l'animation.

Il n'est pas nécessaire d'appeler cette méthode pour l'animation DynamicAnimation.ViewProperty, car le la modification visible minimale est dérivée de la propriété. Exemple :

  • Par défaut, la valeur de variation visible minimale est de 1 pixel pour les vues. telles que TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X et SCROLL_Y
  • Pour les animations qui utilisent la rotation, telles que ROTATION, ROTATION_X et ROTATION_Y, le minimum visible est MIN_VISIBLE_CHANGE_ROTATION_DEGREES, soit 1/10 pixel.
  • Pour les animations qui utilisent l'opacité, la modification visible minimale est de MIN_VISIBLE_CHANGE_ALPHA ou 1/256.

Pour définir la variation minimale visible d'une animation, appelez la méthode setMinimumVisibleChange(), puis transmettez l'une des constantes minimales visibles ou une valeur à calculer pour une propriété personnalisée. Pour en savoir plus sur le calcul de cette valeur, reportez-vous au Calculer une valeur de variation 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 un 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 la formule suivante:

Variation visible minimale = Plage de valeurs de la propriété personnalisée / Plage de animation en pixels

Par exemple, la propriété que vous souhaitez animer passe de 0 à 100. Cela correspond à une variation de 200 pixels. D'après la formule, le minimum la valeur de changement visible est 100 / 200 est égal à 0,5 pixel.