View Animation — o que é, Tween Animation no Android

Autor: IT Sectr Publicado: 2026-03-01 Tempo de leitura: 8 min

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 — anima View através de Tween Animation: Alpha, Translate, Scale, Rotate
  • Definição XML — as animações são descritas em res/anim/ usando , , ,
  • AnimationSet — combinação de múltiplas animações em um conjunto com parâmetros compartilhados
  • Limitação — View Animation não altera propriedades, apenas a renderização: o View permanece na posição original
  • Property Animation — substituto moderno (Animator) que trabalha com propriedades reais de objetos

O que é View Animation?

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.

Tipos de Tween Animation

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

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.

xml
<!-- 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

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

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

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.

View Animation vs Property Animation

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érioView AnimationProperty Animation
Nível de APIAPI 1+ (obsoleto)API 11+ (recomendado)
O que animaRenderização do View (canvas)Propriedades do objeto (setter)
Clique após animaçãoNa posição originalNa nova posição
Tipos de animação4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsNão alteraAltera via setLayoutParams
DesempenhoAlto (apenas canvas)Médio (depende do setter)

Configuração XML de animações

View Animation é tipicamente definida em ficheiros XML em res/anim/ com um elemento raiz (AnimationSet) ou um dos quatro tipos. O AnimationSet permite combinar animações com parâmetros partilhados como startOffset, duration, interpolator.

xml
<!-- 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.

Atributos Comuns

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.

Exemplos de código em Kotlin

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.

kotlin
// 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.

Quando usar View Animation?

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

Qual a diferença entre View Animation e Property Animation?

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.

Porque é que a View Animation é considerada obsoleta?

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 usar-se View Animation para animar botões?

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.

Como cancelar View Animation programaticamente?

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

  • View Animation — um sistema legado de animação Tween no Android com quatro tipos: Alpha, Translate, Scale, Rotate
  • Marcação XML em res/anim/ com elementos , , , e raiz
  • AnimationSet combina animações com startOffset, duration, interpolator partilhados
  • Incompatibilidade de clique — o View após animação permanece na posição original para eventos táteis
  • Property Animation — substituto moderno via ObjectAnimator, AnimatorSet, trabalhando com propriedades reais
  • fillAfter deixa o View no seu estado final mas não altera LayoutParams
  • Migração para Property Animation elimina a incompatibilidade de clique e melhora o desempenho em 15-20%

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.

Discutir o projeto

Leia também