Risorse di animazione

Una risorsa di animazione può definire uno dei due tipi di animazioni disponibili:

Animazione della proprietà
Crea un'animazione modificando i valori delle proprietà di un oggetto in un determinato periodo con un Animator.
Visualizza animazione

Con il framework di visualizzazione animazione puoi eseguire due tipi di animazioni:

Animazione proprietà

Un'animazione definita nel file XML che modifica le proprietà dell'oggetto target, come colore di sfondo o valore alfa, in un determinato periodo di tempo.

percorso file:
res/animator/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore risorsa a ValueAnimator, ObjectAnimator o AnimatorSet
riferimento risorsa:
Nel codice basato su Java o Kotlin: R.animator.filename
In XML: @[package:]animator/filename
:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

Il file deve avere un singolo elemento principale: <set>, <objectAnimator> o <valueAnimator>. Puoi raggruppare gli elementi dell'animazione all'interno dell'elemento <set>, inclusi altri elementi <set>.

:
<set>
Un contenitore che contiene altri elementi di animazione (<objectAnimator>, <valueAnimator> o altri elementi <set>). Rappresenta un AnimatorSet.

Puoi specificare tag <set> nidificati per raggruppare ulteriori animazioni. Ogni <set> può definire il proprio attributo ordering.

Attributi:

android:ordering
Parola chiave. Specifica l'ordine di riproduzione delle animazioni in questo set.
ValoreDescrizione
sequentiallyLe animazioni di questo insieme vengono riprodotte in sequenza.
together (valore predefinito)Riproduci contemporaneamente le animazioni di questo set.
<objectAnimator>
Applica l'animazione a una proprietà specifica di un oggetto in un determinato periodo di tempo. Rappresenta un ObjectAnimator.

Attributi:

android:propertyName
Stringa. Obbligatorio. La proprietà dell'oggetto da animare, indicata dal nome. Ad esempio, puoi specificare "alpha" o "backgroundColor" per un oggetto View. Tuttavia, l'elemento objectAnimator non espone un attributo target, quindi non puoi impostare l'animazione dell'oggetto nella dichiarazione XML. Devi aumentare il volume della risorsa XML di animazione chiamando loadAnimator() e chiamare setTarget() per impostare l'oggetto target che contiene questa proprietà.
android:valueTo
float, int o color. Obbligatorio. Il valore dove termina la proprietà animata. I colori sono rappresentati come numeri esadecimali a sei cifre, ad esempio #333333.
android:valueFrom
float, int o color. Il valore in cui inizia la proprietà animata. Se non specificato, l'animazione inizia al valore ottenuto dal metodo get della proprietà. I colori sono rappresentati come numeri esadecimali a sei cifre, ad esempio #333333.
android:duration
int. Il tempo in millisecondi dell'animazione. 300 millisecondi è il valore predefinito.
android:startOffset
int. Numero di millisecondi di ritardo dell'animazione dopo la chiamata di start().
android:repeatCount
int. Quante volte ripetere un'animazione. Imposta "-1" per ripetere all'infinito o su un numero intero positivo. Ad esempio, il valore "1" indica che l'animazione viene ripetuta una volta dopo l'esecuzione iniziale e viene quindi riprodotta per un totale di due volte. Il valore predefinito è "0", il che significa che non sono presenti ripetizioni.
android:repeatMode
int. Il comportamento di un'animazione quando raggiunge la fine. android:repeatCount deve essere impostato su un numero intero positivo o su "-1" affinché questo attributo abbia un effetto. Impostalo su "reverse" per invertire la direzione dell'animazione a ogni iterazione o su "restart" per ripetere l'animazione ogni volta dall'inizio.
android:valueType
Parola chiave. Non specificare questo attributo se il valore è un colore. Il framework di animazione gestisce automaticamente i valori dei colori.
ValoreDescrizione
intTypeSpecifica che i valori animati sono numeri interi.
floatType (valore predefinito)Specifica che i valori animati sono in virgola mobile.
<animator>
Esegue un'animazione per un determinato periodo di tempo. Rappresenta un ValueAnimator.

Attributi:

android:valueTo
float, int o color. Obbligatorio. Il valore in cui termina l'animazione. I colori sono rappresentati come numeri esadecimali a sei cifre, ad esempio #333333.
android:valueFrom
float, int o color. Obbligatorio. Il valore in cui inizia l'animazione. I colori sono rappresentati come numeri esadecimali a sei cifre, ad esempio #333333.
android:duration
int. Il tempo in millisecondi dell'animazione. 300 ms è il valore predefinito.
android:startOffset
int. Numero di millisecondi di ritardo dell'animazione dopo la chiamata di start().
android:repeatCount
int. Quante volte ripetere un'animazione. Imposta "-1" per ripetere all'infinito o su un numero intero positivo. Ad esempio, il valore "1" indica che l'animazione viene ripetuta una volta dopo l'esecuzione iniziale e viene quindi riprodotta per un totale di due volte. Il valore predefinito è "0", il che significa che non sono presenti ripetizioni.
android:repeatMode
int. Il comportamento di un'animazione quando raggiunge la fine. android:repeatCount deve essere impostato su un numero intero positivo o su "-1" affinché questo attributo abbia un effetto. Impostalo su "reverse" per invertire la direzione dell'animazione a ogni iterazione o su "restart" per ripetere l'animazione ogni volta dall'inizio.
android:valueType
Parola chiave. Non specificare questo attributo se il valore è un colore. Il framework di animazione gestisce automaticamente i valori dei colori.
ValoreDescrizione
intTypeSpecifica che i valori animati sono numeri interi.
floatType (valore predefinito)Specifica che i valori animati sono in virgola mobile.
esempio:

File XML salvato all'indirizzo res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

Per eseguire questa animazione, aumenta le risorse XML del codice fino a un oggetto AnimatorSet, quindi imposta gli oggetti target per tutte le animazioni prima di avviare il set di animazione. Per comodità, la chiamata a setTarget() consente di impostare un singolo oggetto di destinazione per tutti gli elementi secondari di AnimatorSet. Il seguente codice mostra come eseguire questa operazione:

Kotlin

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Java

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
vedi anche:

Visualizza animazione

Il framework di visualizzazione dell'animazione supporta animazioni di interpolazione e fotogramma per fotogramma, entrambe dichiarate in XML. Nelle sezioni seguenti viene descritto come utilizzare entrambi i metodi.

Animazione per interpolazione

Un'animazione definita in XML che esegue transizioni su un'immagine, ad esempio rotazione, dissolvenza, spostamento e allungamento.

percorso file:
res/anim/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore risorsa a un Animation
riferimento risorsa:
In Java: R.anim.filename
In XML: @[package:]anim/filename
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

Il file deve avere un singolo elemento principale: un elemento <alpha>, <scale>, <translate>, <rotate> o <set> che contiene uno o più gruppi di altri elementi di animazione (inclusi gli elementi <set> nidificati).

:
<set>
Un contenitore che contiene altri elementi di animazione (<alpha>, <scale>, <translate>, <rotate>) o altri elementi <set>. Rappresenta un AnimationSet.

Attributi:

android:interpolator
Risorsa interpolatore. Un Interpolator da applicare all'animazione. Il valore deve essere un riferimento a una risorsa che specifica un interpolatore, non un nome di classe dell'interpolatore. Dalla piattaforma sono disponibili risorse di interpolatore predefinite; in alternativa, puoi creare una tua risorsa di interpolatore personale. Per ulteriori informazioni sugli interpolatori, consulta la seguente discussione.
android:shareInterpolator
Booleano. "true" se vuoi condividere lo stesso interpolatore tra tutti gli elementi secondari.
<alpha>
Un'animazione con dissolvenza in entrata o in uscita. Rappresenta un AlphaAnimation.

Attributi:

android:fromAlpha
Virgola mobile. Offset di opacità iniziale, dove 0,0 corrisponde a trasparente e 1,0 a opaco.
android:toAlpha
Virgola mobile. Offset opacità finale, dove 0,0 corrisponde a trasparente e 1,0 a opaco.

Per altri attributi supportati da <alpha>, consulta il riferimento della classe per Animation, i cui attributi XML sono ereditati da questo elemento.

<scale>
Un'animazione di ridimensionamento. Puoi specificare il punto centrale dell'immagine da cui cresce verso l'esterno o verso l'interno specificando pivotX e pivotY. Ad esempio, se questi valori sono 0,0 (nell'angolo in alto a sinistra), tutta la crescita è rivolta verso il basso e verso destra. Rappresenta un ScaleAnimation.

Attributi:

android:fromXScale
Virgola mobile. Offset dimensione X iniziale, dove 1,0 non cambia.
android:toXScale
Virgola mobile. Offset dimensione X finale, dove 1,0 non corrisponde alla modifica.
android:fromYScale
Virgola mobile. Offset dimensione Y iniziale, dove 1,0 non cambia.
android:toYScale
Virgola mobile. Offset dimensione Y finale, dove 1,0 non corrisponde alla modifica.
android:pivotX
Virgola mobile. La coordinata X da rimanere fissa quando l'oggetto viene ridimensionato.
android:pivotY
Virgola mobile. La coordinata Y che rimane fissa quando l'oggetto viene ridimensionato.

Per altri attributi supportati da <scale>, consulta il riferimento della classe per Animation, i cui attributi XML sono ereditati da questo elemento.

<translate>
Un movimento verticale e/o orizzontale. Rappresenta un TranslateAnimation. Supporta i seguenti attributi in uno dei tre formati seguenti:
  • Valori da -100 a 100 che terminano con "%", a indicare una percentuale relativa a se stessa.
  • Valori da -100 a 100 che terminano con "%p", che indicano una percentuale relativa al rispettivo principale.
  • Un valore in virgola mobile senza suffisso che indica un valore assoluto.

Attributi:

android:fromXDelta
Virgola mobile o percentuale. Offset X iniziale. Espressa in pixel rispetto alla posizione normale, ad esempio "5", in percentuale relativa alla larghezza dell'elemento, ad esempio "5%", o in percentuale relativa alla larghezza principale, ad esempio "5%p".
android:toXDelta
Virgola mobile o percentuale. Offset X finale. Espressa in pixel rispetto alla posizione normale, ad esempio "5", in percentuale relativa alla larghezza dell'elemento, ad esempio "5%", o in percentuale relativa alla larghezza principale, ad esempio "5%p".
android:fromYDelta
Virgola mobile o percentuale. Offset Y iniziale. Espressa in pixel rispetto alla posizione normale, ad esempio "5", in percentuale relativa all'altezza dell'elemento, ad esempio "5%", o in percentuale relativa all'altezza principale, ad esempio "5%p".
android:toYDelta
Virgola mobile o percentuale. Offset Y finale. Espressa in pixel rispetto alla posizione normale, ad esempio "5", in percentuale relativa all'altezza dell'elemento, ad esempio "5%", o in percentuale relativa all'altezza principale, ad esempio "5%p".

Per altri attributi supportati da <translate>, consulta il riferimento della classe per Animation, i cui attributi XML sono ereditati da questo elemento.

<rotate>
Un'animazione di rotazione. Rappresenta un RotateAnimation.

Attributi:

android:fromDegrees
Virgola mobile. Posizione angolare iniziale, in gradi.
android:toDegrees
Virgola mobile. Posizione angolare finale, in gradi.
android:pivotX
Virgola mobile o percentuale. La coordinata X del centro di rotazione. Espressa in pixel rispetto al bordo sinistro dell'oggetto, ad esempio "5", in percentuale relativa al bordo sinistro dell'oggetto, ad esempio "5%", o in percentuale relativa al bordo sinistro del contenitore principale, ad esempio "5%p".
android:pivotY
Virgola mobile o percentuale. La coordinata Y del centro di rotazione. Espressa in pixel rispetto al bordo superiore dell'oggetto, ad esempio "5", in percentuale relativa al bordo superiore dell'oggetto, ad esempio "5%", o in percentuale relativa al bordo superiore del contenitore principale, ad esempio "5%p".

Per altri attributi supportati da <rotate>, consulta il riferimento della classe per Animation, i cui attributi XML sono ereditati da questo elemento.

esempio:

File XML salvato all'indirizzo res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    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/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

Il seguente codice dell'applicazione applica l'animazione a un ImageView e avvia l'animazione:

Kotlin

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Java

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
vedi anche:

Interpolatori

Un interpolatore è un modificatore di animazione definito in XML che influisce sulla frequenza di modifica di un'animazione. In questo modo gli effetti dell'animazione esistenti possono essere accelerati, rallentati, ripetuti, rimbalzati e così via.

Un interpolatore viene applicato a un elemento di animazione con l'attributo android:interpolator, il cui valore è un riferimento a una risorsa interpolatore.

Tutti gli interpolatori disponibili in Android sono sottoclassi della classe Interpolator. Per ogni classe dell'interpolatore, Android include una risorsa pubblica a cui puoi fare riferimento per applicare l'interpolatore a un'animazione utilizzando l'attributo android:interpolator. La tabella seguente specifica la risorsa da utilizzare per ciascun interpolatore:

Classe interpolatoreID risorsa
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

Ecco come applicare uno di questi elementi con l'attributo android:interpolator:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

Interpolatori personalizzati

Se gli interpolatori forniti dalla piattaforma non ti soddisfano, puoi creare una risorsa interpolatore personalizzata con attributi modificati. Ad esempio, puoi regolare la velocità di accelerazione per AnticipateInterpolator o regolare il numero di cicli per CycleInterpolator. Per farlo, crea la tua risorsa interpolatore in un file XML.

percorso file:
res/anim/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore di risorsa all'oggetto interpolatore corrispondente
riferimento risorsa:
In XML: @[package:]anim/filename
:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

Se non applichi alcun attributo, l'interpolatore funziona esattamente come quello fornito dalla piattaforma, elencato nella tabella precedente.

:
Nota che ogni implementazione di Interpolator, quando definita in XML, ha un nome che inizia con una lettera minuscola.

<accelerateDecelerateInterpolator>
La frequenza di modifica inizia e termina lentamente, ma accelera verso il centro.

Nessun attributo.

<accelerateInterpolator>
La velocità di cambiamento inizia lentamente, poi accelera.

Attributi:

android:factor
Virgola mobile. Il tasso di accelerazione. Il valore predefinito è 1.
<anticipateInterpolator>
La modifica inizia a ritroso, poi scorre in avanti.

Attributi:

android:tension
Virgola mobile. La quantità di tensione da applicare. Il valore predefinito è 2.
<anticipateOvershootInterpolator>
La modifica inizia indietro, poi viene spostata in avanti e supera il valore target, quindi si assesta sul valore finale.

Attributi:

android:tension
Virgola mobile. La quantità di tensione da applicare. Il valore predefinito è 2.
android:extraTension
Virgola mobile. La quantità per cui moltiplicare la tensione. Il valore predefinito è 1,5.
<bounceInterpolator>
La modifica viene restituita al termine dell'operazione.

Nessun attributo

<cycleInterpolator>
Ripete l'animazione per un numero specificato di cicli. Il tasso di variazione segue un modello sinusoidale.

Attributi:

android:cycles
Numero intero. Il numero di cicli. Il valore predefinito è 1.
<decelerateInterpolator>
La frequenza di modifica inizia rapidamente e poi rallenta.

Attributi:

android:factor
Virgola mobile. La velocità di decelerazione. Il valore predefinito è 1.
<linearInterpolator>
Il tasso di variazione è costante.

Nessun attributo.

<overshootInterpolator>
La modifica va avanti e supera l'ultimo valore, per poi tornare indietro.

Attributi:

android:tension
Virgola mobile. La quantità di tensione da applicare. Il valore predefinito è 2.
esempio:

File XML salvato all'indirizzo res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

Questo XML di animazione applica l'interpolatore:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Animazione frame

Un'animazione definita in XML che mostra una sequenza di immagini in ordine, ad esempio un film.

percorso file:
res/drawable/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilata:
Puntatore risorsa a un AnimationDrawable
riferimento risorsa:
In Java: R.drawable.filename
In XML: @[package:]drawable.filename
:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
:
<animation-list>
Obbligatorio. Deve essere l'elemento principale. Contiene uno o più elementi <item>.

Attributi:

android:oneshot
Booleano. "true" se vuoi eseguire l'animazione una volta; "false" per ripetere l'animazione.
<item>
Un singolo frame di animazione. Deve essere un elemento secondario di un elemento <animation-list>.

Attributi:

android:drawable
Risorsa tracciabile. Il disegno da utilizzare per questo frame.
android:duration
Numero intero. La durata in millisecondi della visualizzazione di questo frame.
esempio:

File XML salvato all'indirizzo res/drawable/rocket_thrust.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

Il seguente codice applicazione imposta l'animazione come sfondo per un elemento View, quindi riproduce l'animazione:

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
vedi anche: