Sposta le visualizzazioni con un'animazione a scorrimento

Prova il metodo Scrivi
Jetpack Compose è il toolkit consigliato per la UI per Android. Scopri come utilizzare le animazioni in Compose.

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 gradualmente l'animazione. Ha uno slancio iniziale, ricevuto principalmente dalla velocità del gesto, e rallenta gradualmente. L'animazione termina quando la velocità dell'animazione è sufficientemente bassa da non apportare modifiche visibili sullo schermo del dispositivo.

Figura 1. Animazione scorrimento

Per informazioni 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:

  1. Apri il file build.gradle del modulo dell'app.
  2. 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 scorrevole

La classe FlingAnimation consente di creare un'animazione scorrevole per un oggetto. Per creare un'animazione scorrevole, crea un'istanza della classe FlingAnimation e fornisci un oggetto e la relativa proprietà 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à di variazione di una proprietà dell'animazione all'inizio dell'animazione. La velocità iniziale predefinita è impostata su zero pixel al secondo. Devi quindi definire una velocità iniziale per fare in modo che l'animazione non termini immediatamente.

Puoi utilizzare un valore fisso come velocità iniziale, oppure basarlo sulla 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 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 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 primavera.

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: usa le classi GestureDetector.OnGestureListener e VelocityTracker per recuperare e calcolare la velocità dei gesti di tocco, rispettivamente.

Impostare un intervallo di valori dell'animazione

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

Nota: quando il valore di un'animazione scorrevole 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 le difficoltà

Il metodo setFriction() ti consente di modificare l'attrito dell'animazione. Definisce la velocità alla diminuzione della velocità in un'animazione.

Nota: se non imposti l'attrito all'inizio dell'animazione, verrà utilizzato un valore predefinito di 1.

Il metodo restituisce l'oggetto la cui animazione utilizza il valore di attrito che hai fornito.

Codice di esempio

L'esempio seguente illustra un'inclinazione orizzontale. La velocità acquisita dal tracker della velocità è velocityX e i limiti di scorrimento sono impostati su 0 e maxscroll. 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 variazione 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 quando si anima DynamicAnimation.ViewProperty perché la modifica minima visibile deriva dalla proprietà. Ecco alcuni esempi:

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

Per impostare la modifica minima visibile per un'animazione, chiama il metodo setMinimumVisibleChange() e passa una delle costanti minime visibili o un valore da calcolare per una proprietà personalizzata. Per ulteriori informazioni sul calcolo di questo valore, consulta la sezione Calcolo di un valore di modifica visibile minimo.

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 modifica visibile

Per calcolare il valore minimo di modifica visibile per una proprietà personalizzata, utilizza la formula seguente:

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

Ad esempio, la proprietà che vuoi animare va da 0 a 100. Ciò corrisponde a una variazione di 200 pixel. Secondo la formula, il valore minimo di modifica visibile è 100 / 200 è uguale a 0,5 pixel.