Em algumas situações, as imagens precisam ser animadas. Isso é útil se você deseja exibir uma animação de carregamento personalizada composta por várias imagens ou se você quiser que um ícone se transforme de acordo com a à ação. O Android oferece duas opções para animar drawables.
A primeira opção é usar um AnimationDrawable
. Isso
você especifica diversos objetos
arquivos drawable que exibem um de cada vez para
criar uma animação. A segunda opção é usar uma
AnimatedVectorDrawable
, que permite animar as propriedades.
de um drawable vetorial.
Usar AnimationDrawable
Uma forma de criar uma animação é carregar uma sequência de recursos drawable, como um rolo de filme.
A classe AnimationDrawable
é a base para esses tipos de animações desenháveis.
Para definir os frames de uma animação no código, use o método AnimationDrawable
mas é mais fácil defini-los com um único arquivo XML que lista os frames que
compõem a animação. O arquivo XML para esse tipo de animação pertence ao res/drawable/
do seu projeto Android. Nesse caso, as instruções indicam a ordem e a duração
cada frame da animação.
O arquivo XML consiste em um elemento <animation-list>
como o nó raiz e um
série de nós <item>
filhos que definem um frame, um recurso drawable
e a duração dele. Confira um exemplo de arquivo XML para uma animação Drawable
:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <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>
Essa animação é executada por três frames. Como definir o android:oneshot
da lista para true
faz com que ela se repita uma vez e, em seguida, pare e mantenha
no último frame. Se você definir android:oneshot
como false
,
a animação vai se repetir.
Se você salvar esse XML como rocket_thrust.xml
no arquivo res/drawable/
do projeto, é possível adicioná-lo como a imagem de plano de fundo a um View
e depois
chame start()
para tocar. Aqui está um exemplo de uma atividade na qual a animação é adicionada a um
ImageView
e, depois, animados
quando a tela é tocada:
Kotlin
private lateinit var rocketAnimation: AnimationDrawable override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val rocketImage = findViewById<ImageView>(R.id.rocket_image).apply { setBackgroundResource(R.drawable.rocket_thrust) rocketAnimation = background as AnimationDrawable } rocketImage.setOnClickListener({ rocketAnimation.start() }) }
Java
AnimationDrawable rocketAnimation; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.drawable.rocket_thrust); rocketAnimation = (AnimationDrawable) rocketImage.getBackground(); rocketImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { rocketAnimation.start(); } }); }
É importante observar que o método start()
, chamado no
Não é possível chamar AnimationDrawable
durante o método onCreate()
da sua
Activity
, porque o AnimationDrawable
ainda não está totalmente anexado ao
janela. Para reproduzir a animação imediatamente, sem exigir interação, é possível chamá-la do
no onStart()
Activity
, que é chamado quando o Android torna a visualização visível na tela.
Para mais informações sobre a sintaxe XML e tags e atributos disponíveis, consulte Recursos de animação.
Usar AnimatedVectorDrawable
Um drawable vetorial
é um tipo de desenhável que é escalonável sem ficar pixelado ou desfocado. A
AnimatedVectorDrawable
turma e
AnimatedVectorDrawableCompat
para compatibilidade com versões anteriores. Permite animar o
propriedades de um desenhável de vetor, como girá-lo ou alterar os dados de caminho para transformá-lo em
imagem diferente.
Você normalmente define desenháveis de vetor animados em três arquivos XML:
- Um drawable vetorial com o elemento
<vector>
res/drawable/
. - Um drawable vetorial animado com o elemento
<animated-vector>
emres/drawable/
. - Um ou mais animadores de objeto com o elemento
<objectAnimator>
emres/animator/
.
Drawables vetoriais animados podem animar os atributos de <group>
e
Elementos <path>
. O elemento <group>
define um conjunto de
caminhos ou subgrupos, e o elemento <path>
define os caminhos a serem desenhados.
Ao definir um drawable vetorial que você quer animar, use o método android:name
para atribuir um nome exclusivo a grupos e caminhos, para que você possa consultá-los a partir do animador
e definições. Exemplo:
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600"> <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:name="v" android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector>
A definição de drawables vetoriais animados se refere aos grupos e caminhos no drawable vetorial pelos nomes:
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vectordrawable" > <target android:name="rotationGroup" android:animation="@animator/rotation" /> <target android:name="v" android:animation="@animator/path_morph" /> </animated-vector>
As definições de animação representam
ObjectAnimator
ou
objetos AnimatorSet
. A
o primeiro animador neste exemplo gira o grupo de destino em 360 graus:
<objectAnimator android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" />
O segundo animador nesse exemplo transforma a forma do caminho do drawable vetorial em outra. Os caminhos precisam ser compatíveis com a transformação: eles precisam ter o mesmo número de comandos. e o mesmo número de parâmetros para cada comando.
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="pathData" android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z" android:valueTo="M300,70 l 0,-70 70,0 0,140 -70,0 z" android:valueType="pathType" /> </set>
Confira o AnimatedVectorDrawable
resultante:
AnimatedVectorDrawable
.Visualização do drawable vetorial animado (AVD)
A ferramenta Animation Vector Drawable no Android Studio permite visualizar animações
recursos drawable. Essa ferramenta ajuda você a visualizar <animation-list>
,
<animated-vector>
e <animated-selector>
recursos em
Android Studio e facilita o refinamento de animações personalizadas.
Para obter mais informações, consulte a referência da API para
AnimatedVectorDrawable
: