Um recurso de animação pode definir um dos dois tipos de animações:
- Animação de propriedade
- Cria uma animação ao modificar os valores de propriedade de um objeto em um período definido com um
Animator
. - Animação de visualizações
-
Você pode fazer dois tipos de animação com o framework para animação de visualizações:
- Animação de interpolação: cria uma animação realizando uma série de transformações em uma única imagem com um
Animation
- Animação de frame: cria uma animação ao mostrar uma sequência de imagens em ordem com um
AnimationDrawable
.
- Animação de interpolação: cria uma animação realizando uma série de transformações em uma única imagem com um
Animação de propriedade
Uma animação definida em XML que modifica propriedades do objeto de destino, como cor de fundo ou valor Alfa, por um período definido.
- local do arquivo:
res/animator/filename.xml
O nome do arquivo será usado como o ID do recurso.- tipo de dado de recurso compilado:
- Ponteiro de recurso para um
ValueAnimator
,ObjectAnimator
ouAnimatorSet
. - referência de recurso:
-
Em código Kotlin ou baseado em Java:
R.animator.filename
Em XML:@[package:]animator/filename
- sintaxe:
-
<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=["repeat" | "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=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/> <set> ... </set> </set>
O arquivo precisa ter um único elemento raiz:
<set>
,<objectAnimator>
ou<valueAnimator>
. Você pode agrupar elementos de animação dentro do elemento<set>
, incluindo outros elementos<set>
. - elementos:
- exemplo:
-
Arquivo XML salvo em 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>
Para executar essa animação, é preciso inflar os recursos XML no código para um objeto
AnimatorSet
e definir os objetos de destino para todas as animações antes de iniciar o conjunto. Por conveniência, a chamada desetTarget()
define um único objeto de destino para todos os filhos deAnimatorSet
. O código a seguir mostra como fazer isso: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();
- veja também:
-
- Animação de propriedade
- Demonstrações de API para exemplos de como usar o sistema de animação de propriedade.
Animação de visualizações
O framework para animação de visualizações é compatível com animações de interpolação e frame a frame, que podem ser declaradas em XML. As seções a seguir descrevem como usar os dois métodos.Animação de interpolação
Uma animação definida em XML que realiza transições, como rotação, esmaecimento, movimentação e alongamento em um gráfico.
- local do arquivo:
res/anim/filename.xml
O nome do arquivo será usado como o ID do recurso.- tipo de dado de recurso compilado:
- Ponteiro de recurso para um
Animation
. - referência de recurso:
-
Em Java:
R.anim.filename
Em XML:@[package:]anim/filename
- sintaxe:
-
<?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>
O arquivo precisa ter um único elemento raiz: um elemento
<alpha>
,<scale>
,<translate>
,<rotate>
ou<set>
que contenha um grupo (ou grupos) de outros elementos de animação (até mesmo elementos<set>
aninhados). - elementos:
- exemplo:
-
Arquivo XML salvo em 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>
Esse código do aplicativo aplicará a animação a um
ImageView
e a iniciará: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); - veja também:
Interpoladores
Um interpolador é um modificador de animação definido em XML que afeta a taxa de mudança em uma animação. Isso permite que os efeitos de animação existentes sejam acelerados, desacelerados, repetidos, oscilados etc.
Um interpolador é aplicado a um elemento de animação com o atributo android:interpolator
, cujo valor é uma referência a um recurso de interpolação.
Todos os interpoladores disponíveis no Android são subclasses da classe Interpolator
. Para cada classe de interpolador, o Android inclui um recurso público que pode ser referenciado para aplicar o interpolador a uma animação com o atributo android:interpolator
.
A tabela a seguir especifica o recurso que será usado para cada interpolador:
Classe do interpolador | ID do recurso |
---|---|
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 |
Veja como você pode aplicar um desses com o atributo android:interpolator
:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Interpoladores personalizados
Se os interpoladores fornecidos pela plataforma (listados na tabela acima) não forem satisfatórios, você poderá criar um recurso de interpolação personalizado com atributos modificados.
Por exemplo, você pode ajustar a taxa de aceleração para o AnticipateInterpolator
ou ajustar o número de ciclos para o CycleInterpolator
. Para fazer isso, crie seu próprio recurso de interpolação em um arquivo XML.
- local do arquivo:
res/anim/filename.xml
O nome do arquivo será usado como o ID do recurso.- tipo de dado de recurso compilado:
- Ponteiro de recurso para o objeto interpolador correspondente.
- referência de recurso:
-
Em XML:
@[package:]anim/filename
- sintaxe:
-
<?xml version="1.0" encoding="utf-8"?> <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android" android:attribute_name="value" />
Se você não aplicar nenhum atributo, seu interpolador funcionará exatamente da mesma forma que os fornecidos pela plataforma (listados na tabela acima).
- elementos:
- Observe que cada implementação de
Interpolator
, quando definida em XML, tem o nome iniciado por letras minúsculas. - exemplo:
-
Arquivo XML salvo em
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" />
Este XML de animação aplicará o interpolador:
<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" />
Animação de frame
Uma animação definida em XML que mostra uma sequência de imagens em ordem (como um filme).
- local do arquivo:
res/drawable/filename.xml
O nome do arquivo será usado como o ID do recurso.- tipo de dado de recurso compilado:
- Ponteiro de recurso para um
AnimationDrawable
. - referência de recurso:
-
Em Java:
R.drawable.filename
Em XML:@[package:]drawable.filename
- sintaxe:
-
<?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>
- elementos:
- exemplo:
-
- Arquivo XML salvo em
res/drawable/rocket.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>
- Este código do aplicativo definirá a animação como o segundo plano de uma visualização. Depois disso, ele abrirá a animação:
-
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()
; }
- Arquivo XML salvo em
- veja também: