Sposta le visualizzazioni con un'animazione a scorrimento

Prova la modalità Scrivi
Jetpack Compose è il toolkit dell'interfaccia utente consigliato per Android. Scopri come utilizzare le animazioni in Compose.

L'animazione basata sullo scorrimento utilizza una forza di attrito proporzionale alla velocità di un oggetto. Utilizzala per animare una proprietà di un oggetto e per terminare gradualmente l'animazione. Ha uno slancio iniziale, ricevuto per lo più dalla velocità del gesto, e rallenta gradualmente. L'animazione termina quando la sua velocità è sufficientemente bassa da non rendere visibile alcun cambiamento sullo schermo del dispositivo.

Figura 1. Animazione a scorrimento

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:

  1. Apri il file build.gradle per il modulo dell'app.
  2. Aggiungi la libreria AndroidX alla sezione dependencies.

    trendy

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    Kotlin

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

Creare un'animazione di scorrimento

La classe FlingAnimation consente di creare un'animazione flessione per un oggetto. Per creare un'animazione a scorrimento, 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 velocità

La velocità iniziale definisce la velocità con cui cambia una proprietà dell'animazione 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 basarlo sulla velocità di un gesto tattile. Se scegli di fornire un valore fisso, devi definire il valore in dp al secondo, quindi convertirlo in pixel al secondo. La definizione del valore in dp al secondo consente alla velocità di essere indipendente dalla densità e dai fattori di forma del dispositivo. Per saperne di più sulla conversione della velocità iniziale in pixel al secondo, consulta la sezione Conversione dei dp per secondo in pixel al secondo in Spring Animation.

Per impostare la velocità, chiama il metodo setStartVelocity() e trasmettila in pixel al secondo. Il metodo restituisce l'oggetto mobile su cui è impostata la velocità.

Nota: utilizza le classi GestureDetector.OnGestureListener e VelocityTracker per recuperare e calcolare rispettivamente la velocità dei gesti tattili.

Imposta un intervallo di valori dell'animazione

Puoi impostare i valori minimi e massimi dell'animazione quando vuoi limitare il valore della proprietà a un determinato intervallo. Questo controllo intervallo è particolarmente utile quando anima le proprietà che hanno un intervallo intrinseco, come alfa (da 0 a 1).

Nota: quando il valore di un'animazione fling raggiunge il valore minimo o massimo, l'animazione termina.

Per impostare il valore 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.

Stabilisci un 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, per quest'ultima viene utilizzato 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'inflessione orizzontale. La velocità acquisita dal tracker di velocità è velocityX e i limiti di scorrimento sono impostati su 0 e maxScorri. 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 anima una proprietà personalizzata che 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 di DynamicAnimation.ViewProperty perché la modifica minima visibile deriva dalla proprietà. Ecco alcuni esempi:

  • Il valore minimo di modifica visibile predefinito è di 1 pixel per le proprietà di visualizzazione come TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, SCROLL_X e SCROLL_Y.
  • Per le animazioni che utilizzano la rotazione, ad esempio ROTATION, ROTATION_X e ROTATION_Y, la modifica minima visibile è MIN_VISIBLE_CHANGE_ROTATION_DEGREES (1/10 pixel).
  • Per le animazioni che utilizzano l'opacità, la modifica minima visibile è MIN_VISIBLE_CHANGE_ALPHA o 1/256.

Per impostare la modifica visibile minima per un'animazione, chiama il metodo setMinimumVisibleChange() e trasmetti 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 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 anima una proprietà personalizzata che non è definita in pixel.

Calcolo di un valore minimo di variazione visibile

Per calcolare il valore della variazione visibile minima per una proprietà personalizzata, utilizza la seguente formula:

Modifica visibile minima = intervallo del valore della proprietà personalizzata / intervallo di ottimizzazione in pixel

Ad esempio, la proprietà che vuoi animare avanza da 0 a 100. Ciò corrisponde a una modifica di 200 pixel. In base alla formula, il valore della variazione minima visibile è 100 / 200 è uguale a 0,5 pixel.