Visualizza animazione

Puoi utilizzare il sistema Visualizza animazione per eseguire animazioni interrotte su Visualizzazioni. L'animazione intercambiabile calcola l'animazione in base a informazioni quali il punto iniziale, il punto finale, le dimensioni, la rotazione e altri aspetti comuni dell'animazione.

Un'animazione di interpolazione può eseguire una serie di trasformazioni semplici (posizione, dimensione, rotazione e trasparenza) dei 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 tutte le classi utilizzate in un'animazione di interpolazione.

Una sequenza di istruzioni di animazione definisce l'animazione interpolazione definita da codice XML o Android. Come per la definizione di un layout, consigliamo di utilizzare un file XML in quanto è più leggibile, riutilizzabile e scambiabile rispetto all'impostazione come hardcoded dell'animazione. Nell'esempio seguente, utilizziamo XML. Per scoprire di più sulla definizione di un'animazione nel codice dell'applicazione, anziché in XML, consulta la classe AnimationSet e altre sottoclassi Animation.

Le istruzioni di animazione definiscono le trasformazioni che vuoi che vengano eseguite, quando e il tempo necessario per l'applicazione. Le trasformazioni possono essere sequenziali o simultanee. Ad esempio, puoi spostare i contenuti di un TextView da sinistra a destra e poi ruotare di 180 gradi oppure fare in modo che il testo si sposti e ruoti contemporaneamente. Ogni trasformazione richiede un set di parametri specifici per quella trasformazione (dimensione iniziale e dimensione finale per la modifica delle dimensioni, angolo iniziale e angolo finale di 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 di animazione appartiene alla directory res/anim/ del tuo progetto Android. Il file deve avere un singolo elemento principale: può essere un singolo elemento <alpha>, <scale>, <translate>, <rotate>, interpolatore o <set> che contiene gruppi di questi elementi (che potrebbero includere un altro elemento <set>). Per impostazione predefinita, tutte le istruzioni di animazione vengono applicate contemporaneamente. Per fare in modo che vengano eseguite in sequenza, devi specificare l'attributo startOffset, come mostrato nell'esempio seguente.

Il seguente codice XML di uno degli ApiDemos viene utilizzato per estendere, quindi ruotare e ruotare contemporaneamente 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 a destra.

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

Puoi determinare la modalità di applicazione di una trasformazione 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 iniziare lentamente e accelerare. Ognuna ha un valore di attributo che può essere applicato nel file XML.

Con questo XML salvato come hyperspace_jump.xml nella directory res/anim/ del progetto, il seguente codice lo farà riferimento 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() e assegnare l'animazione alla vista con View.setAnimation().

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

Nota: indipendentemente dalle modalità di spostamento o ridimensionamento dell'animazione, i limiti della vista che contiene l'animazione non verranno regolati automaticamente per adattarla. Anche in questo caso, l'animazione verrà comunque tracciata oltre i limiti della relativa visualizzazione e non verrà ritagliata. Tuttavia, il ritaglio si verificherà se l'animazione supera i limiti della vista principale.