Risorse di animazione

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

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

Con il framework Visualizza animazione puoi creare due tipi di animazioni:

Animazione della proprietà

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

percorso del file:

res/animator/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilato:
Puntatore di risorsa a ValueAnimator, ObjectAnimator, oppure AnimatorSet
riferimento della risorsa:
In codice basato su Java o Kotlin: R.animator.filename
In XML: @[package:]animator/filename
sintassi:
<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 raggruppa gli elementi dell'animazione all'interno dell'elemento <set>, inclusi altri <set> elementi.

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

Puoi specificare tag <set> nidificati ulteriormente raggruppa le 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
sequentiallyRiproduci le animazioni in questo set in sequenza.
together (valore predefinito)Riproduci contemporaneamente le animazioni di questo set.
<objectAnimator>
Consente di attivare una specifica proprietà di un oggetto nel corso di un determinato periodo di tempo. Rappresenta ObjectAnimator.

Attributi:

android:propertyName
Stringa. Obbligatorio. La proprietà dell'oggetto da animare, a cui fa riferimento il nome. Ad esempio, puoi specificare "alpha" o "backgroundColor" per un oggetto View. L'elemento objectAnimator non espone un elemento target non puoi impostare l'oggetto in modo che venga animato nella dichiarazione XML. Devi gonfia la risorsa XML dell'animazione chiamando loadAnimator() e chiamando setTarget() per impostare l'oggetto target che contiene questa proprietà.
android:valueTo
float, int o color. Obbligatorio. Il valore in cui termina la proprietà animata. I colori sono rappresentati come numeri esadecimali a sei cifre, come #333333.
android:valueFrom
float, int o color. Il valore in cui inizia la proprietà animata. In caso contrario specificato, l'animazione inizia dal valore ottenuto dal metodo get della proprietà. I colori sono rappresentati come numeri esadecimali a sei cifre, come #333333.
android:duration
int. Il tempo in millisecondi dell'animazione. 300 millisecondi è il valore predefinito.
android:startOffset
int. Il ritardo di animazione in millisecondi dopo start() è stato chiamato.
android:repeatCount
int. Quante volte ripetere un'animazione. Imposta su "-1" all'infinito ripetuti o a un numero intero positivo. Ad esempio, il valore "1" indica che l'animazione viene ripetuto una volta dopo l'esecuzione iniziale dell'animazione, quindi l'animazione riproduce un totale di due volte. Il valore predefinito è "0", che indica nessuna ripetizione.
android:repeatMode
int. Comportamento di un'animazione al termine dell'animazione. android:repeatCount deve essere impostato su un numero intero positivo o su "-1" affinché questo attributo abbia effetto. Impostato su "reverse" per fare in modo che la direzione inverso dell'animazione a ogni iterazione o "restart" per ottenere l'animazione loop dall'inizio ogni volta.
android:valueType
Parola chiave. Non specificare questo attributo se il valore è un colore. Il framework dell'animazione gestisce automaticamente il colore e i relativi valori.
ValoreDescrizione
intTypeSpecifica che i valori animati sono numeri interi.
floatType (valore predefinito)Specifica che i valori animati sono in virgola mobile.
<animator>
Consente di eseguire un'animazione nel corso di 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, come #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, come #333333.
android:duration
int. Il tempo in millisecondi dell'animazione. 300 ms è il valore predefinito.
android:startOffset
int. Il ritardo di animazione in millisecondi dopo start() è stato chiamato.
android:repeatCount
int. Quante volte ripetere un'animazione. Imposta su "-1" all'infinito ripetuti o a un numero intero positivo. Ad esempio, il valore "1" indica che l'animazione viene ripetuto una volta dopo l'esecuzione iniziale dell'animazione, quindi l'animazione riproduce un totale di due volte. Il valore predefinito è "0", che indica nessuna ripetizione.
android:repeatMode
int. Comportamento di un'animazione al termine dell'animazione. android:repeatCount deve essere impostato su un numero intero positivo o su "-1" affinché questo attributo abbia effetto. Impostato su "reverse" per fare in modo che la direzione inverso dell'animazione a ogni iterazione o "restart" per ottenere l'animazione loop dall'inizio ogni volta.
android:valueType
Parola chiave. Non specificare questo attributo se il valore è un colore. Il framework dell'animazione gestisce automaticamente il colore e i relativi valori.
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 in 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, gonfia le risorse XML nel tuo codice fino a un oggetto AnimatorSet, quindi imposta gli oggetti di destinazione per tutte le animazioni prima di iniziare il set di animazioni. La chiamata a setTarget() consente di impostare un singolo oggetto di destinazione per tutti gli elementi secondari di AnimatorSet per comodità. Il seguente codice mostra come fare:

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 dell'animazione di visualizzazione supporta animazioni di interpolazione e fotogramma per fotogramma, entrambe dichiarate in XML. Le seguenti sezioni descrivono come utilizzare entrambi i metodi.

Animazione dei preadolescenti

Un'animazione definita in XML che esegue le transizioni su un'immagine, ad esempio la rotazione, dissolvenza, movimento e stretching.

percorso del file:

res/anim/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilato:
Puntatore della risorsa a Animation
riferimento della risorsa:
In Java: R.anim.filename
In XML: @[package:]anim/filename
sintassi:
<?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 <alpha>, <scale>, <translate> Elemento <rotate> o <set> che contiene uno o più gruppi di altri elementi dell'animazione (inclusi gli elementi <set> nidificati).

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

Attributi:

android:interpolator
Risorsa interpolatore. Un elemento Interpolator da applicare all'animazione. Il valore deve essere un riferimento a una risorsa che specifica un interpolatore, non è un nome di classe di interpolatore. Esistono interpolatori predefiniti di risorse disponibili dalla piattaforma oppure puoi creare la tua risorsa di interpolatore. Consulta la discussione seguente per ulteriori informazioni sugli interpolatori.
android:shareInterpolator
Booleano. "true" se vuoi condividere lo stesso interpolatore tra tutti i publisher secondari elementi.
<alpha>
Un'animazione di dissolvenza in entrata o in uscita. Rappresenta un AlphaAnimation.

Attributi:

android:fromAlpha
In virgola mobile. Offset dell'opacità iniziale, dove 0,0 corrisponde a trasparente e 1,0 è opaco.
android:toAlpha
In virgola mobile. Offset opacità finale, dove 0,0 corrisponde a trasparente e 1,0 è opaco.

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

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

Attributi:

android:fromXScale
In virgola mobile. Offset della dimensione X iniziale, dove 1,0 non è una modifica.
android:toXScale
In virgola mobile. Offset dimensione X finale, dove 1,0 non è una modifica.
android:fromYScale
In virgola mobile. Offset della dimensione Y iniziale, dove 1,0 non è una modifica.
android:toYScale
In virgola mobile. Offset dimensione Y finale, dove 1,0 non è una modifica.
android:pivotX
In virgola mobile. La coordinata X che deve rimanere fissa quando l'oggetto viene scalato.
android:pivotY
In virgola mobile. La coordinata Y deve rimanere fissa quando l'oggetto viene scalato.

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

<translate>
Un movimento verticale e/o orizzontale. Rappresenta un TranslateAnimation. Supporta i seguenti attributi in uno qualsiasi di questi tre formati:
  • Valori da -100 a 100 che terminano con "%", che indica una percentuale rispetto a se stessa.
  • Valori compresi tra -100 e 100 che terminano con "%p", con l'indicazione di una percentuale relativa principale.
  • Un valore in virgola mobile senza suffisso che indica un valore assoluto.

Attributi:

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

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

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

Attributi:

android:fromDegrees
In virgola mobile. Posizione angolare iniziale, in gradi.
android:toDegrees
In virgola mobile. Posizione angolare finale, in gradi.
android:pivotX
In 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 rispetto all'elemento principale bordo sinistro del container, ad esempio "5%p".
android:pivotY
In 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 rispetto all'elemento principale bordo superiore del container, ad esempio "5%p".

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

esempio:

File XML salvato in 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 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 variazione di un l'animazione. In questo modo gli effetti di animazione esistenti possono essere accelerati, decelerati, ripetuti rimbalzo e così via.

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

Tutti gli interpolatori disponibili in Android sono sottoclassi della classe Interpolator. Per ogni classe di 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 puoi 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 personalizzato con attributi modificati. Ad esempio, puoi regolare la frequenza dell'accelerazione per AnticipateInterpolator o modifica il numero cicli per il CycleInterpolator. Per farlo, creare la tua risorsa di interpolatore in un file XML.

percorso del file:

res/anim/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilato:
Puntatore della risorsa all'oggetto interpolatore corrispondente
riferimento della risorsa:
Nel file XML: @[package:]anim/filename
sintassi:
<?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 quelle fornite dalla piattaforma, elencate nella tabella precedente.

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

<accelerateDecelerateInterpolator>
Il tasso di cambiamento inizia e termina lentamente, ma accelera attraverso il centrale.

Nessun attributo.

<accelerateInterpolator>
Il ritmo di cambiamento inizia lentamente, per poi accelerare.

Attributi:

android:factor
In virgola mobile. La velocità di accelerazione. Il valore predefinito è 1.
<anticipateInterpolator>
La modifica inizia a ritroso e poi si inclina in avanti.

Attributi:

android:tension
In virgola mobile. La quantità di tensione da applicare. Il valore predefinito è 2.
<anticipateOvershootInterpolator>
La modifica inizia a ritroso, poi si sposta in avanti e supera il valore target, quindi si assesta al valore finale.

Attributi:

android:tension
In virgola mobile. La quantità di tensione da applicare. Il valore predefinito è 2.
android:extraTension
In virgola mobile. Il numero per cui moltiplicare la tensione. L'impostazione predefinita è 1,5
<bounceInterpolator>
La modifica viene restituita al termine.

Nessun attributo

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

Attributi:

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

Attributi:

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

Nessun attributo.

<overshootInterpolator>
La modifica avanza e supera l'ultimo valore, poi torna indietro.

Attributi:

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

File XML salvato in 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 file 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 del frame

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

percorso del file:

res/drawable/filename.xml
Il nome file viene utilizzato come ID risorsa.
tipo di dati della risorsa compilato:
Puntatore della risorsa a AnimationDrawable
riferimento della risorsa:
In Java: R.drawable.filename
In XML: @[package:]drawable.filename
sintassi:
<?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>
elementi:
<animation-list>
Obbligatorio. Deve essere l'elemento principale. Contiene uno o più <item> elementi.

Attributi:

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

Attributi:

android:drawable
Risorsa disegnabile. Il drawable da utilizzare per questo frame.
android:duration
Numero intero. La durata della visualizzazione del frame, in millisecondi.
esempio:

File XML salvato in 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 dell'applicazione imposta l'animazione come sfondo per un View, quindi riproduci 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: