La animación basada en desplazamientos utiliza una fuerza de fricción proporcional a una la velocidad del objeto. Se usa para animar una propiedad de un objeto y para finalizar la animación gradualmente. Tiene un impulso inicial, se recibe principalmente a partir de la velocidad del gesto y se ralentiza gradualmente. El La animación llega a su fin cuando la velocidad de la animación es lo suficientemente baja. que no realice cambios visibles en la pantalla del dispositivo.
![](https://developer.android.com/static/images/guide/topics/graphics/fling-animation.gif?authuser=8&hl=es)
Para obtener información sobre temas relacionados, lee las siguientes guías:
Cómo agregar la biblioteca de AndroidX
Para usar las animaciones basadas en la física, debes agregar la biblioteca de AndroidX a tu proyecto de la siguiente manera:
- Abre el archivo
build.gradle
del módulo de tu app. - Agrega la biblioteca de AndroidX a la sección
dependencies
.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Cómo crear una animación de desplazamiento
La clase FlingAnimation
te permite crear
una animación de lanzamiento para un objeto. Para crear una animación de desplazamiento, crea una
de la clase FlingAnimation
y
proporcionar un objeto y la propiedad del objeto que desea animar.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Cómo establecer la velocidad
La velocidad inicial define la velocidad a la que una propiedad de animación cambios al comienzo de la animación. La velocidad inicial predeterminada es está configurada en cero píxeles por segundo. Por lo tanto, debes definir una velocidad de inicio para asegurarte de que la animación no termine de inmediato.
Puedes usar un valor fijo como la velocidad inicial o puedes basarlo de la velocidad de un gesto táctil. Si eliges proporcionar un valor fijo, debes definir el valor en dp por segundo y luego convertirlo a píxeles por segundo. Definir el valor en dp por segundo permite que la velocidad se sin importar la densidad y los factores de forma del dispositivo. Para obtener más información para convertir la velocidad inicial a píxeles por segundo, consulta la Conversión sección de dp por segundo a píxeles por segundo en Animación de resorte.
Para establecer la velocidad, llama al método setStartVelocity()
y pasa
la velocidad en píxeles por segundo. El método devuelve el objeto
que se establece la velocidad.
Nota: Usa la
GestureDetector.OnGestureListener
y las
Clases VelocityTracker
para recuperar y procesar
la velocidad de los gestos táctiles, respectivamente.
Cómo establecer un rango de valores de la animación
Puedes establecer los valores de animación mínimos y máximos cuando desees restringir el valor de la propiedad a un cierto rango. El control de rango está especialmente útil cuando se animan propiedades que tienen una función como alfa (de 0 a 1).
Nota: Cuando el valor de una animación de desplazamiento alcanza el valor mínimo o máximo, finaliza la animación.
Para establecer los valores mínimo y máximo, llama al setMinValue()
.
y setMaxValue()
, respectivamente.
Ambos métodos muestran el objeto de animación para el que estableciste el valor.
Cómo establecer la fricción
El método setFriction()
te permite cambiar la configuración
fricción. Este define qué tan rápido se disminuye la velocidad en una animación.
Nota: Si no estableces la fricción al comienzo de utiliza un valor de fricción predeterminado de 1.
El método muestra el objeto cuya animación utiliza el valor de fricción que proporcionan.
Código de muestra
En el siguiente ejemplo, se demuestra un desplazamiento horizontal. La velocidad capturada de
el rastreador de velocidad es velocityX
y los límites de desplazamiento son
se establece en 0 y
maxDesplazar. La fricción se estableció en 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();
Cómo establecer el cambio mínimo visible
Si animas una propiedad personalizada que no está definida en píxeles, deberás establecer la un cambio mínimo en el valor de la animación visible para los usuarios. Integra determina un umbral razonable para finalizar la animación.
No es necesario llamar a este método durante la animación.
DynamicAnimation.ViewProperty
porque
el cambio mínimo visible se deriva de la propiedad. Por ejemplo:
- El valor de cambio mínimo visible predeterminado es 1 píxel para la vista
propiedades, como
TRANSLATION_X
,TRANSLATION_Y
yTRANSLATION_Z
,SCROLL_X
ySCROLL_Y
- Para las animaciones que usan rotación, como
ROTATION
,ROTATION_X
yROTATION_Y
, el mínimo visible cambio esMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, o 1/10 píxel. - Para las animaciones que usan opacidad, el cambio mínimo visible es
MIN_VISIBLE_CHANGE_ALPHA
o 1/256.
Para establecer el cambio mínimo visible para una animación, llama al
setMinimumVisibleChange()
y pasa cualquiera
una de las constantes mínimas visibles o un valor que debes calcular
para una propiedad personalizada. Para obtener más información sobre cómo calcular este valor,
consulta la
Cómo calcular un valor de cambio mínimo visible
sección.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Nota: Solo debes pasar un valor cuando animas un propiedad personalizada que no está definida en píxeles.
Cómo calcular un valor de cambio mínimo visible
Para calcular el valor de cambio mínimo visible de una propiedad personalizada, usa la siguiente fórmula:
Cambio mínimo visible = Rango del valor de la propiedad personalizada / Rango de animación en píxeles
Por ejemplo, la propiedad que quieres animar avanza de 0 a 100. Esto corresponde a un cambio de 200 píxeles. Según la fórmula, el mínimo el valor de cambio visible es que 100 / 200 es igual a 0.5 píxeles.