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
, quindi assegnarla alla visualizzazione con Animation.setStartTime()
.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.