Sposta le visualizzazioni con un'animazione a scorrimento

Prova il modo di comporre
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come utilizzare le animazioni in Compose.

L'animazione basata sul 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 una quantità di moto iniziale, che deriva 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.

Figura 1. Animazione di scorrimento

Per saperne di più sugli argomenti correlati, leggi le seguenti guide:

Aggiungere la libreria AndroidX

Per utilizzare le animazioni basate sulla fisica, devi aggiungere la libreria AndroidX al tuo progetto nel seguente modo:

  1. Apri il file build.gradle per il modulo dell'app.
  2. 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")
            }
            

Creare un'animazione di scorrimento rapido

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

La velocità iniziale definisce la velocità con cui una proprietà di 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 oppure basarla sulla velocità di un gesto 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 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 a molla.

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

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

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à che hanno un intervallo intrinseco, come l'alpha (da 0 a 1).

Nota: quando il valore di un'animazione di scorrimento 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 il quale hai impostato il valore.

Imposta attrito

Il metodo setFriction() consente di modificare l'attrito dell'animazione. Definisce la velocità con cui diminuisce la velocità in un'animazione.

Nota: se non imposti l'attrito all'inizio dell'animazione, quest'ultima utilizza un valore di attrito predefinito pari a 1.

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

Codice di esempio

L'esempio seguente illustra uno scorrimento 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 di 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 visibile minima viene derivata dalla proprietà. Ad esempio:

  • Il valore predefinito minimo di variazione visibile è 1 pixel per le proprietà della visualizzazione 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 variazione minima visibile è MIN_VISIBLE_CHANGE_ROTATION_DEGREES o 1/10 di pixel.
  • Per le animazioni che utilizzano l'opacità, la modifica visibile minima è 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 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 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 modifica di 200 pixel. In base alla formula, il valore minimo della variazione visibile è 100 / 200, ovvero 0,5 pixel.