View Animation é um sistema de animação legado do Android API 1+ que trabalha com objetos View através de Tween Animation (Alpha, Translate, Scale, Rotate). O Google recomenda Property Animation (Animator) para todos os novos projetos. Este artigo explica os princípios, tipos, marcação XML e razões para a descontinuação.
Principais Pontos
View Animation é um subsistema de animação do Android que opera ao nível de View (API 1+). Utiliza quatro tipos de Tween Animation: AlphaAnimation (opacidade), TranslateAnimation (movimento), ScaleAnimation (escala) e RotateAnimation (rotação). Cada animação é descrita num ficheiro XML na pasta res/anim/ ou criada programaticamente em código Kotlin.
O mecanismo View Animation não altera as propriedades reais de um View — redesenha o View numa nova posição, escala ou opacidade, mas a chamada de retorno onTouchEvent() recebe as coordenadas da localização original. Esta é uma limitação chave conhecida como incompatibilidade de clique (click mismatch).
De acordo com a Documentação para Programadores Android (2026), o Google marcou a View Animation como uma API obsoleta a partir do Android 3.0 (API 11). Para novos projetos, recomenda-se Property Animation — Animator, AnimatorSet e ObjectAnimator, que trabalham com propriedades reais de objetos através de métodos setter.
Tween Animation é animação “entre” fotogramas-chave: define o estado inicial e final, e o sistema calcula os fotogramas intermédios. O Android fornece quatro tipos padrão, cada um com o seu próprio conjunto de parâmetros.
AlphaAnimation altera a opacidade de um View de fromAlpha para toAlpha. Os valores variam de 0.0 (completamente transparente) a 1.0 (completamente visível). Por padrão, a animação dura 300 ms. O parâmetro fillAfter=true deixa o View no estado de opacidade final.
<!-- res/anim/fade_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"
android:fillAfter="true" />TranslateAnimation move um View da posição inicial (fromXDelta, fromYDelta) para a posição final (toXDelta, toYDelta). Os valores são especificados em píxeis, percentagens do pai ou percentagens do próprio View. Por exemplo, 100% significa 100% da largura do View.
ScaleAnimation escala um View em relação ao ponto pivotX/pivotY. fromXScale=1.0, toXScale=2.0 duplica a largura. O parâmetro pivotType determina em relação a que o pivô é calculado: self, parent ou absolute. A animação de escala não altera as dimensões reais do View — apenas a renderização.
RotateAnimation roda um View em torno de um ponto pivô por um ângulo de fromDegrees a toDegrees. O ângulo é medido em graus: 0 é a posição original, 360 é uma rotação completa. Para rotação infinita, use repeatCount=INFINITE.
A diferença entre View Animation e Property Animation (Animator) é uma distinção fundamental na arquitetura de animação do Android. A View Animation opera apenas na renderização, enquanto a Property Animation altera as propriedades reais do objeto através de métodos setter, levando a atualizações do layout.
| Critério | View Animation | Property Animation |
|---|---|---|
| Nível de API | API 1+ (obsoleto) | API 11+ (recomendado) |
| O que anima | Renderização do View (canvas) | Propriedades do objeto (setter) |
| Clique após animação | Na posição original | Na nova posição |
| Tipos de animação | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Não altera | Altera via setLayoutParams |
| Desempenho | Alto (apenas canvas) | Médio (depende do setter) |
View Animation é tipicamente definida em ficheiros XML em res/anim/ com um elemento raiz
<!-- res/anim/bounce.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator">
<translate
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration="600" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.3"
android:duration="600" />
</set>O ficheiro XML é carregado via AnimationUtils.loadAnimation(). O Interpolator define como o parâmetro muda ao longo do tempo: accelerate, decelerate, bounce, overshoot. Um Interpolator personalizado é criado através do recurso XML @anim/interpolator_name.
Todas as animações Tween suportam os atributos: duration (ms), startOffset (atraso antes de iniciar), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. O atributo fillAfter determina se o View permanece no estado final da animação após a conclusão.
Embora as animações sejam geralmente definidas em XML, também podem ser criadas programaticamente usando Kotlin. A abordagem programática é útil para parâmetros dinâmicos: o valor da opacidade depende do estado da aplicação em vez de ser definido estaticamente.
// Criação programática de AlphaAnimation em Kotlin
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.View
fun View.fadeOut(duration: Long = 500L, onEnd: () -> Unit = {}) {
val animation = AlphaAnimation(1.0f, 0.0f).apply {
this.duration = duration
fillAfter = true
setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationEnd(animation: Animation?) { onEnd() }
override fun onAnimationStart(animation: Animation?) {}
override fun onAnimationRepeat(animation: Animation?) {}
})
}
startAnimation(animation)
}
// Carregamento de animação a partir de XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — combinação de animações
val set = AnimationSet(true).apply {
addAnimation(TranslateAnimation(0f, 200f, 0f, 0f).apply { duration = 400 })
addAnimation(RotateAnimation(0f, 360f).apply {
duration = 400
pivotX = view.width / 2f
pivotY = view.height / 2f
})
}
view.startAnimation(set)O método startAnimation() adiciona a animação à fila de renderização do View. Para cancelar, use clearAnimation(). Importante: fillAfter=true não altera LayoutParams — quando startAnimation é chamado novamente, a animação começa a partir do estado original do View, não do último renderizado.
View Animation tem um âmbito de aplicação estreito em 2026: suporte para Android 4.x (API 16-19) onde a Property Animation pode funcionar instavelmente; efeitos simples de aparecimento/desaparecimento que não requerem alterações de LayoutParams; animações onde a incompatibilidade de clique não é crítica (por exemplo, elementos de fundo). Para todos os outros casos, o Google recomenda migrar para ObjectAnimator ou AnimatorSet.
De acordo com os Programadores Android, a Property Animation é 15-20% mais eficiente em memória porque não cria fotogramas intermédios de canvas. Migrar de View Animation para Property Animation também elimina o problema de incompatibilidade de clique: o View após a animação recebe toques na sua nova posição.
Perguntas Frequentes
View Animation apenas altera a renderização do View — após a animação, o View permanece na sua posição original para eventos táteis. Property Animation altera as propriedades reais do objeto, atualizando LayoutParams e tratando corretamente os cliques na nova posição.
O Google declarou a View Animation obsoleta a partir do Android 3.0 (API 11). A razão é a incompatibilidade de clique (click mismatch) e a incapacidade de animar propriedades arbitrárias de objetos. Property Animation resolve estes problemas e é recomendada para todos os novos projetos.
Pode ser usado mas não é recomendado. Um botão após TranslateAnimation aparecerá numa nova localização, mas os cliques serão registados na posição original. Para botões, use Property Animation ou um composable com AnimatedVisibility no Jetpack Compose.
Chame view.clearAnimation(). Se a animação foi iniciada com fillAfter=true, o View permanecerá no seu estado final. Para forçar o retorno ao estado original, chame clearAnimation() e invalidate().
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também