A animação de rolagem usa uma força de atrito proporcional a uma velocidade de um objeto. Use-o para animar uma propriedade de um objeto e para finalizar a animação gradualmente. Ele tem um impulso inicial, principalmente recebidas da velocidade do gesto e desacelera gradualmente. A a animação termina quando a velocidade é baixa o suficiente para que não haja mudanças visíveis na tela do dispositivo.
Para saber mais sobre temas relacionados, leia os seguintes guias:
Adicionar a biblioteca do AndroidX
Para usar as animações baseadas em física, adicione a biblioteca do AndroidX ao seu projeto da seguinte forma:
- Abra o arquivo
build.gradle
relativo ao módulo do seu app. - Adicione a biblioteca do AndroidX à seção
dependencies
.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Criar uma animação de rolagem
A classe FlingAnimation
permite criar
uma animação de deslize rápido para um objeto. Para criar uma animação de deslize rápido, crie uma
instância da classe FlingAnimation
e
forneça um objeto e a propriedade do objeto que você deseja animar.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Definir a velocidade
A velocidade inicial define a velocidade com que uma propriedade de animação muda no início da animação. A velocidade inicial padrão é definido como zero pixel por segundo. Portanto, você precisa definir uma velocidade inicial para garantir que a animação não termine imediatamente.
É possível usar um valor fixo como a velocidade inicial ou baseá-lo da velocidade de um gesto de toque. Se você optar por fornecer um valor fixo, defina o valor em dp por segundo e depois o converta em pixels por segundo. Definir o valor em dp por segundo permite que a velocidade seja independentemente da densidade e dos formatos dos dispositivos. Para mais informações sobre convertendo a velocidade inicial em pixels por segundo, consulte Converter na seção "dp por segundo em pixels por segundo" Animação de mola.
Para definir a velocidade, chame o método setStartVelocity()
e transmita
a velocidade em pixels por segundo. O método retorna o objeto de deslize rápido
em que a velocidade é definida.
Observação: use o
GestureDetector.OnGestureListener
e o
Classes VelocityTracker
para recuperar e computar
a velocidade dos gestos de toque, respectivamente.
Definir um intervalo de valores de animação
Você pode definir os valores mínimo e máximo da animação quando quiser restringir o valor da propriedade a um determinado intervalo. Esse controle de intervalo é especialmente útil quando você anima propriedades que têm uma característica intervalo, como alfa (de 0 a 1).
Observação: quando o valor de uma animação de deslize rápido atinge o a animação termina.
Para definir os valores mínimo e máximo, chame o método setMinValue()
e setMaxValue()
, respectivamente.
Ambos os métodos retornam o objeto de animação para o qual você definiu o valor.
Definir o atrito
O método setFriction()
permite mudar a
atrito Ele define a rapidez com que a velocidade diminui em uma animação.
Observação: se você não definir o atrito no início do a animação, ela vai usar um valor de atrito padrão de 1.
O método retorna o objeto cuja animação usa o valor de atrito que você que oferecem.
Exemplo de código
O exemplo abaixo ilustra uma rolagem horizontal. A velocidade capturada
o rastreador de velocidade for velocityX
, e os limites de rolagem serão
é definido como 0
maxRole. O atrito é definido como 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();
Definir a mudança mínima visível
Ao animar uma propriedade personalizada que não está definida em pixels, você deve definir o uma mudança mínima do valor de animação visível para os usuários. Ela determina um limite razoável para terminar a animação.
Não é necessário chamar esse método ao animar
DynamicAnimation.ViewProperty
porque o
a mudança mínima visível é derivada da propriedade. Exemplo:
- O valor padrão da mudança mínima visível é de 1 pixel para visualização
como
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
eSCROLL_Y
. - Para animações que usam rotação, como
ROTATION
,ROTATION_X
eROTATION_Y
, os valores mínimos visíveis mudança éMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, ou 1/10 pixel. - Para animações que usam opacidade, a mudança mínima visível é
MIN_VISIBLE_CHANGE_ALPHA
ou 1/256.
Para definir a mudança mínima visível para uma animação, chame o método
setMinimumVisibleChange()
e transmita
uma das constantes mínimas visíveis ou um valor que você precisa calcular
para uma propriedade personalizada. Para mais informações sobre como calcular esse valor,
consulte o
Como calcular um valor de mudança mínima visível
nesta seção.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Observação: é necessário transmitir um valor somente quando você anima um uma propriedade personalizada não definida em pixels.
Calcular um valor de mudança mínima visível
Para calcular o valor de mudança mínima visível para uma propriedade personalizada, use o método seguinte fórmula:
Mudança mínima visível = Intervalo do valor da propriedade personalizada / Intervalo de animação em pixels
Por exemplo, a propriedade que você quer animar vai de 0 a 100. Isso corresponde a uma mudança de 200 pixels. De acordo com a fórmula, o mínimo o valor de mudança visível é 100 / 200 é igual a 0,5 pixel.