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 intercambiabile: 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 intercambiabile: crea un'animazione eseguendo una serie di trasformazioni su una singola immagine.
con un
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:
- Il nome file viene utilizzato come ID risorsa.
- tipo di dati della risorsa compilato:
- Puntatore di risorsa a
ValueAnimator
,ObjectAnimator
, oppureAnimatorSet
- 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:
- 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 asetTarget()
consente di impostare un singolo oggetto di destinazione per tutti gli elementi secondari diAnimatorSet
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:
-
- Panoramica dell'animazione della proprietà
- Demo dell'API per esempi di come utilizzare il sistema di animazione delle proprietà
res/animator/filename.xml
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:
- 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:
- 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:
res/anim/filename.xml
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 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 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:
- 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. - 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" />
res/anim/filename.xml
Animazione del frame
Un'animazione definita in XML che mostra una sequenza di immagini in ordine, come un film.
- percorso del file:
- 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:
- 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 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:
res/drawable/filename.xml