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 preadattata: crea un'animazione eseguendo una serie di trasformazioni su una singola immagine
con un
Animation
. - Animazione frame: crea un'animazione mostrando una sequenza di immagini in ordine con un
AnimationDrawable
.
- Animazione preadattata: crea un'animazione eseguendo una serie di trasformazioni su una singola immagine
con un
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
oAnimatorSet
- 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>
. - :
- 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 asetTarget()
consente di impostare un singolo oggetto di destinazione per tutti gli elementi secondari diAnimatorSet
. 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:
-
- Panoramica dell'animazione della proprietà
- Demo dell'API per esempi di come utilizzare il sistema di animazione delle proprietà
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). - :
- 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 interpolatore | ID 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. - 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>
- :
- 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 isAnimatable
) { rocketAnimation.start()
}Java
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.
setBackgroundResource
(R.drawable.rocket_thrust); rocketAnimation = rocketImage.getBackground()
; if (rocketAnimation instanceofAnimatable
) { ((Animatable)rocketAnimation).start()
; } - vedi anche: