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 sullo scorrimento utilizza una forza di attrito proporzionale la velocità dell'oggetto. Utilizzalo per animare una proprietà di un oggetto per terminare gradualmente l'animazione. Ha un impulso iniziale, che è ricevuto principalmente dalla velocità del gesto e rallenta gradualmente. La l'animazione termina quando la velocità dell'animazione è sufficientemente bassa che non apporti modifiche visibili sullo schermo del dispositivo.

Figura 1. Animazione di 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 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

Il corso FlingAnimation ti consente di creare un'animazione scorrevole per un oggetto. Per realizzare un'animazione scorrevole, dell'istanza della classe FlingAnimation fornisce 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 una proprietà dell'animazione modifiche 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 convertendo la velocità iniziale in pixel al secondo, fai riferimento Conversione in corso... dalla sezione da dp al secondo a pixel al secondo Animazione primaverile.

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

Nota: utilizza lo GestureDetector.OnGestureListener e VelocityTracker classi da recuperare e calcolare la velocità dei gesti di tocco.

Impostare un intervallo di valori dell'animazione

Puoi impostare il valore minimo e massimo dell'animazione quando vuoi limita il valore della proprietà a un determinato intervallo. Questo controllo intervallo è particolarmente utile quando si animano proprietà che hanno un'entità intrinseca di testo, ad esempio alpha (da 0 a 1).

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

Per impostare i valori minimo e massimo, richiama il metodo setMinValue() e setMaxValue(), rispettivamente. 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 il valore complicazioni. 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 che che forniscono.

Codice di esempio

L'esempio seguente illustra un'inclinazione 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 variazione minima visibile

Quando animi una proprietà personalizzata che non è definita in pixel, devi impostare la classe modifica minima del valore dell'animazione visibile agli utenti. it determina una soglia ragionevole per terminare l'animazione.

Non è necessario chiamare questo metodo durante l'animazione DynamicAnimation.ViewProperty perché la modifica minima visibile deriva dalla proprietà. Ad esempio:

  • Il valore predefinito delle modifiche visibili minime è 1 pixel per la visualizzazione proprietà 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, il numero minimo visibile la modifica è MIN_VISIBLE_CHANGE_ROTATION_DEGREES, ovvero 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 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 le Calcolo di un valore minimo di modifica 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 un personalizzata che non è definita in pixel.

Calcolo di un valore minimo di modifica visibile

Per calcolare il valore minimo di variazione visibile per una proprietà personalizzata, utilizza la proprietà 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.