L'animazione basata su lancio utilizza una forza di attrito proporzionale alla velocità di un oggetto. Utilizzalo per animare una proprietà di un oggetto e per terminare l'animazione gradualmente. Ha un momento iniziale, che viene principalmente ricevuto dalla velocità del gesto, e rallenta gradualmente. L'animazione termina quando la sua velocità è sufficientemente bassa da non apportare alcuna modifica visibile sullo schermo del dispositivo.

Per informazioni sugli argomenti correlati, leggi le seguenti guide:
Aggiungi la libreria AndroidX
Per usare le animazioni basate sulla fisica, devi aggiungere la libreria AndroidX al tuo progetto come segue:
- Apri il file
build.gradle
per il modulo dell'app. - Aggiungi la libreria AndroidX alla sezione
dependencies
.Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Crea un'animazione scorrevole
Il corso FlingAnimation
ti consente di creare
un'animazione scorrevole per un oggetto. Per creare un'animazione fling, crea un'istanza della classe FlingAnimation
e fornisci un oggetto e la relativa proprietà da animare.
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Imposta la velocità
La velocità iniziale definisce la velocità con cui una proprietà dell'animazione cambia all'inizio dell'animazione. La velocità iniziale predefinita è impostato su zero pixel al secondo. Pertanto, devi definire una velocità iniziale per assicurarti che l'animazione non termini immediatamente.
Puoi utilizzare un valore fisso come velocità iniziale oppure basarlo della velocità di un gesto di tocco. Se scegli di fornire un valore fisso, devi definire il valore in dp al secondo, quindi convertirlo in pixel e un numero elevato di operazioni di I/O al secondo. La definizione del valore in dp al secondo consente indipendentemente dalla densità e dai fattori di forma. Per ulteriori informazioni sulla conversione della velocità iniziale in pixel al secondo, consulta la sezione Conversione di dp al secondo in pixel al secondo in Animazione a molla.
Per impostare la velocità, chiama il metodo setStartVelocity()
e passa
la velocità in pixel al secondo. Il metodo restituisce l'oggetto fling su cui è impostata la velocità.
Nota: utilizza le classi
GestureDetector.OnGestureListener
e
VelocityTracker
per recuperare e calcolare
rispettivamente la velocità dei gesti tocco.
Impostare un intervallo di valori di animazione
Puoi impostare i valori minimo e massimo dell'animazione quando vuoi limitare il valore della proprietà a un determinato intervallo. Questo controllo dell'intervallo è particolarmente utile quando animi proprietà con un intervallo intrinseco, ad esempio alpha (da 0 a 1).
Nota: quando il valore di un'animazione con movimento brusco raggiunge il valore minimo o massimo, l'animazione termina.
Per impostare i valori minimo e massimo, chiama rispettivamente i metodi setMinValue()
e setMaxValue()
.
Entrambi i metodi restituiscono l'oggetto animazione per cui hai impostato il valore.
Impostare la frizione
Il metodo setFriction()
consente di modificare la frizione dell'animazione. Definisce la velocità alla diminuzione della velocità in un'animazione.
Nota: se non imposti l'attrito all'inizio di l'animazione utilizza un valore di attrito predefinito pari a 1.
Il metodo restituisce l'oggetto la cui animazione utilizza il valore di attrito fornito.
Codice di esempio
L'esempio seguente mostra un movimento orizzontale. La velocità acquisita da
il tracker della velocità è velocityX
e i limiti di scorrimento sono
impostato su 0 e
maxScorrimento. Il livello di attrito è impostato su 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();
Imposta la modifica minima visibile
Quando animi una proprietà personalizzata non definita in pixel, devi impostare la variazione minima del valore dell'animazione visibile agli utenti. Determina una soglia ragionevole per terminare l'animazione.
Non è necessario chiamare questo metodo durante l'animazione
DynamicAnimation.ViewProperty
perché la
modifica minima visibile è derivata dalla proprietà. Ad esempio:
- Il valore predefinito della variazione minima visibile è 1 pixel per le proprietà della vista come
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
eSCROLL_Y
. - Per le animazioni che utilizzano la rotazione, come
ROTATION
,ROTATION_X
eROTATION_Y
, il numero minimo visibile la modifica èMIN_VISIBLE_CHANGE_ROTATION_DEGREES
, ovvero 1/10 di pixel. - Per le animazioni che utilizzano l'opacità, la variazione minima visibile è
MIN_VISIBLE_CHANGE_ALPHA
, ovvero 1/256.
Per impostare la modifica minima visibile per un'animazione, chiama il metodo
setMinimumVisibleChange()
e supera uno dei due
una delle costanti minime visibili o un valore che devi calcolare
per una proprietà personalizzata. Per ulteriori informazioni sul calcolo di questo valore, consulta la sezione Calcolo di un valore minimo di variazione visibile.
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Nota: devi passare un valore solo quando animi una proprietà personalizzata non definita in pixel.
Calcolo di un valore minimo di modifica visibile
Per calcolare il valore minimo della variazione visibile per una proprietà personalizzata, utilizza la seguente formula:
Modifica minima visibile = intervallo di valori della proprietà personalizzata / intervallo di ottimizzazione in pixel
Ad esempio, la proprietà che vuoi animare passa da 0 a 100. Ciò corrisponde a una variazione di 200 pixel. In base alla formula, il minimo il valore di modifica visibile è 100 / 200 è uguale a 0,5 pixel.