L'animazione basata su scorrimento 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 uno slancio iniziale, che viene ricevuto principalmente dalla velocità del gesto, e rallenta gradualmente. L'animazione termina quando la sua velocità è sufficientemente bassa da non apportare modifiche visibili sullo schermo del dispositivo.
Per scoprire di più sugli argomenti correlati, leggi le seguenti guide:
Aggiungi la libreria AndroidX
Per utilizzare le animazioni basate sulla fisica, devi aggiungere la libreria AndroidX al tuo progetto come segue:
- Apri il file
build.gradleper il modulo dell'app. - Aggiungi la libreria AndroidX alla sezione
dependencies.Alla moda
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Crea un'animazione di scorrimento veloce
La classe FlingAnimation ti consente di creare un'animazione di scorrimento rapido per un oggetto. Per creare un'animazione di lancio, crea un'istanza della classe FlingAnimation e fornisci un oggetto e la proprietà dell'oggetto che vuoi 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 è impostata 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 o basarla sulla velocità di un gesto di tocco. Se scegli di fornire un valore fisso, devi definirlo in dp al secondo, quindi convertirlo in pixel al secondo. La definizione del valore in dp al secondo consente di rendere la velocità indipendente dalla densità e dai fattori di forma di un dispositivo. 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 con effetto 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: Utilizzare le classi GestureDetector.OnGestureListener e VelocityTracker per recuperare e calcolare la velocità dei gesti tattili, rispettivamente.
Imposta un intervallo di valori di animazione
Puoi impostare i valori di animazione minimo e massimo quando vuoi limitare il valore della proprietà a un determinato intervallo. Questo controllo dell'intervallo è particolarmente utile quando animi proprietà che hanno un intervallo intrinseco, come l'alpha (da 0 a 1).
Nota: quando il valore di un'animazione di scorrimento rapido 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 di animazione per il quale hai impostato il valore.
Imposta l'attrito
Il metodo setFriction() consente di modificare l'attrito dell'animazione. Definisce la velocità con cui la velocità diminuisce in un'animazione.
Nota: se non imposti l'attrito all'inizio dell'animazione, 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 illustra un movimento rapido orizzontale. La velocità acquisita dal tracker della velocità è velocityX e i limiti di scorrimento sono impostati su 0 e maxScroll. L'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 variazione minima visibile
Quando animi una proprietà personalizzata non definita in pixel, devi impostare la modifica minima del valore dell'animazione visibile agli utenti. Determina una soglia ragionevole per terminare l'animazione.
Non è necessario chiamare questo metodo quando si anima
DynamicAnimation.ViewProperty perché la
variazione visibile minima è derivata dalla proprietà. Ad esempio:
- Il valore predefinito della variazione visibile minima è 1 pixel per le proprietà della visualizzazione come
TRANSLATION_X,TRANSLATION_Y,TRANSLATION_Z,SCROLL_XeSCROLL_Y. - Per le animazioni che utilizzano la rotazione, come
ROTATION,ROTATION_XeROTATION_Y, la modifica visibile minima èMIN_VISIBLE_CHANGE_ROTATION_DEGREESo 1/10 di pixel. - Per le animazioni che utilizzano l'opacità, la modifica visibile minima è
MIN_VISIBLE_CHANGE_ALPHAo 1/256.
Per impostare la variazione minima visibile per un'animazione, chiama il metodo setMinimumVisibleChange() e passa una delle costanti minime visibili o un valore che devi calcolare per una proprietà personalizzata. Per saperne di più sul calcolo di questo valore, consulta la sezione Calcolo di un valore di variazione visibile minima.
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 di variazione visibile minimo
Per calcolare il valore minimo di variazione visibile per una proprietà personalizzata, utilizza la seguente formula:
Variazione minima visibile = intervallo del valore della proprietà personalizzata / intervallo dell'animazione 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 valore minimo della variazione visibile è 100 / 200, ovvero 0,5 pixel.