Um recurso de animação pode definir um dos dois tipos de animações:
- Animação de propriedades
- Cria uma animação modificando os valores de propriedade de um objeto em um período
definido com um
Animator
. - Animação de visualizações
-
É possível 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 mostrando 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 propriedades
Uma animação definida em XML que modifica propriedades do objeto de destino, como cor do segundo plano ou valor Alfa, por um período definido.
- Localização do arquivo:
res/animator/filename.xml
O nome do arquivo é usado como ID de recurso.- Tipo de dados do 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=["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>
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, infle os recursos XML no código para um objeto
AnimatorSet
e defina 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 abaixo 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();
- Confira também:
-
- Visão geral de animação de propriedades
- Demonstrações de API para exemplos de como usar o sistema de animação de propriedades.
Animação de visualizações
O framework para animação de visualizações oferece suporte para animações de interpolação e de frame a frame, que são declaradas em XML. As próximas seções descrevem como usar os dois métodos.
Animação de interpolação
Uma animação definida em XML que realiza transições em um gráfico, como rotação, esmaecimento, movimentação e alongamento.
- Localização do arquivo:
res/anim/filename.xml
O nome do arquivo é usado como ID de recurso.- Tipo de dados do 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
<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>
O código do aplicativo a seguir ativa a animação em um
ImageView
e a inicia: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); - Confira 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 já existentes sejam acelerados, desacelerados, repetidos, rejeitados etc.
Um interpolador é ativado em um elemento de animação com o atributo android:interpolator
.
O 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 ativar o interpolador em uma animação
com o atributo android:interpolator
.
A tabela abaixo 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 |
Confira como você pode aplicar um desses interpoladores com o atributo android:interpolator
:
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>
Interpoladores personalizados
Caso os interpoladores fornecidos pela plataforma não sejam satisfatórios, você pode 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.
- Localização do arquivo:
res/anim/filename.xml
O nome do arquivo é usado como ID de recurso.- Tipo de dados do 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 ativa nenhum atributo, seu interpolador funciona exatamente da mesma forma que os fornecidos pela plataforma, listados na tabela anterior.
- Elementos:
- Observe que cada implementação de
Interpolator
, quando definida em XML, tem o nome iniciado por uma letra minúscula. - 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" />
Esse XML de animação ativa 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.
- Localização do arquivo:
res/drawable/filename.xml
O nome do arquivo é usado como ID de recurso.- Tipo de dados do 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_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>
O código do aplicativo a seguir define a animação como o segundo plano de uma
View
. Depois disso, ele abre 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()
; } - Confira também: