Visualizza animazione

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

Puoi utilizzare il sistema di animazione delle visualizzazioni per eseguire animazioni con interpolazioni nelle visualizzazioni. L'animazione di interpolazione calcola l'animazione con informazioni come il punto iniziale, il punto finale, le dimensioni, la rotazione e altri aspetti comuni di un'animazione.

Un'animazione di interpolazione può eseguire una serie di semplici trasformazioni (posizione, dimensione, rotazione e trasparenza) sui contenuti di un oggetto View. Pertanto, se hai un oggetto TextView, puoi spostare, ruotare, ingrandire o rimpicciolire il testo. Se ha un'immagine di sfondo, quest'ultima verrà trasformata insieme al testo. animation package fornisce tutti i corsi utilizzati in un'animazione di interpolazione.

Una sequenza di istruzioni di animazione definisce l'animazione di interpolazione, definita dal codice XML o Android. Come per la definizione di un layout, è consigliato un file XML perché è più leggibile, riutilizzabile e scambiabile rispetto all'hardcoded dell'animazione. Nell'esempio seguente utilizziamo XML. (Per scoprire di più sulla definizione di un'animazione nel codice dell'applicazione, anziché in XML, fai riferimento alla classe AnimationSet e ad altre sottoclassi Animation.)

Le istruzioni di animazione definiscono le trasformazioni che vuoi che vengano applicate, quando devono avvenire e il tempo necessario per l'applicazione. Le trasformazioni possono essere sequenziali o simultanee. Ad esempio, i contenuti di una visualizzazione di testo possono essere spostati da sinistra a destra e poi ruotati di 180 gradi oppure il testo può essere spostato e ruotato contemporaneamente. Ogni trasformazione richiede un set di parametri specifici per la trasformazione (dimensione iniziale e dimensione finale per la variazione della dimensione, angolo iniziale e angolo finale per la rotazione e così via) e anche un insieme di parametri comuni (ad esempio, ora di inizio e durata). Per eseguire più trasformazioni contemporaneamente, assegna loro la stessa ora di inizio. Per renderle sequenziali, calcola l'ora di inizio più la durata della trasformazione precedente.

Il file XML dell'animazione appartiene alla directory res/anim/ del progetto Android. Il file deve avere un singolo elemento principale: un singolo elemento <alpha>, <scale>, <translate>, <rotate>, un elemento interpolator o un elemento <set> che contiene gruppi di questi elementi (che possono includere un altro <set>). Per impostazione predefinita, tutte le istruzioni di animazione vengono applicate contemporaneamente. Per fare in modo che vengano visualizzati in sequenza, devi specificare l'attributo startOffset, come mostrato nell'esempio seguente.

Il seguente XML di una delle ApiDemos viene utilizzato per estendere, quindi contemporaneamente ruotare e ruotare un oggetto View.

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

Le coordinate dello schermo (non utilizzate in questo esempio) sono (0,0) nell'angolo in alto a sinistra e aumentano man mano che scendi e verso destra.

Alcuni valori, come pivotX, possono essere specificati in relazione all'oggetto stesso o all'oggetto principale. Assicurati di utilizzare il formato corretto per ciò che vuoi ("50" per il 50% rispetto all'elemento principale o "50%" per il 50% rispetto a se stesso).

Puoi determinare in che modo una trasformazione viene applicata nel tempo assegnando un Interpolator. Android include diverse sottoclassi di Interpolator che specificano varie curve di velocità: ad esempio, AccelerateInterpolator indica a una trasformazione di avviare e accelerare. Ognuno di essi ha un valore dell'attributo che può essere applicato nel file XML.

Con questo file XML salvato come hyperspace_jump.xml nella directory res/anim/ del progetto, il seguente codice farà riferimento a questo file e lo applicherà a un oggetto ImageView del layout.

Kotlin

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

Java

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

In alternativa a startAnimation(), puoi definire un'ora di inizio per l'animazione con Animation.setStartTime(), quindi assegnarla alla visualizzazione con View.setAnimation().

Per ulteriori informazioni sulla sintassi XML, sui tag e sugli attributi disponibili, consulta la sezione Risorse di animazione.

Nota:indipendentemente dal modo in cui si può spostare o ridimensionare l'animazione, i limiti della vista in cui si trova l'animazione non verranno regolati automaticamente per adattarla alla visualizzazione. Tuttavia, l'animazione verrà comunque disegnata oltre i limiti della visualizzazione e non verrà ritagliata. Tuttavia, l'aggiornamento avverrà se l'animazione supera i limiti della vista principale.