View Animation — qué es, Tween Animation en Android

Autor: IT Sectr Publicado: 2026-03-01 Tiempo de lectura: 8 min

View Animation es un sistema de animación heredado de Android API 1+ que trabaja con objetos View mediante Tween Animation (Alpha, Translate, Scale, Rotate). Google recomienda Property Animation (Animator) para todos los proyectos nuevos. Este artículo explica los principios, tipos, marcado XML y las razones de su obsolescencia.

Puntos Clave

  • View Animation — anima View mediante Tween Animation: Alpha, Translate, Scale, Rotate
  • Definición XML — las animaciones se describen en res/anim/ usando , , ,
  • AnimationSet — combinación de varias animaciones en un conjunto con parámetros compartidos
  • Limitación — View Animation no cambia propiedades, solo el renderizado: el View permanece en su posición original
  • Property Animation — reemplazo moderno (Animator) que trabaja con propiedades reales de objetos

¿Qué es View Animation?

View Animation es un subsistema de animación de Android que opera a nivel de View (API 1+). Utiliza cuatro tipos de Tween Animation: AlphaAnimation (opacidad), TranslateAnimation (movimiento), ScaleAnimation (escala) y RotateAnimation (rotación). Cada animación se describe en un archivo XML en la carpeta res/anim/ o se crea programáticamente en código Kotlin.

El mecanismo de View Animation no cambia las propiedades reales de un View — redibuja el View en una nueva posición, escala u opacidad, pero la devolución de llamada onTouchEvent() recibe las coordenadas de la ubicación original. Esta es una limitación clave conocida como desajuste de clic (click mismatch).

Según la Documentación para Desarrolladores de Android (2026), Google ha marcado View Animation como una API obsoleta a partir de Android 3.0 (API 11). Para proyectos nuevos se recomienda Property Animation — Animator, AnimatorSet y ObjectAnimator, que trabajan con propiedades reales de objetos mediante métodos setter.

Tipos de Tween Animation

Tween Animation es una animación “entre” fotogramas clave: defines el estado inicial y final, y el sistema calcula los fotogramas intermedios. Android proporciona cuatro tipos estándar, cada uno con su propio conjunto de parámetros.

AlphaAnimation

AlphaAnimation cambia la opacidad de un View desde fromAlpha hasta toAlpha. Los valores van de 0.0 (completamente transparente) a 1.0 (completamente visible). Por defecto, la animación dura 300 ms. El parámetro fillAfter=true deja el View en el estado de opacidad 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 mueve un View desde la posición inicial (fromXDelta, fromYDelta) hasta la posición final (toXDelta, toYDelta). Los valores se especifican en píxeles, porcentajes del padre o porcentajes del propio View. Por ejemplo, 100% significa el 100% del ancho del View.

ScaleAnimation

ScaleAnimation escala un View con respecto al punto pivotX/pivotY. fromXScale=1.0, toXScale=2.0 duplica el ancho. El parámetro pivotType determina con respecto a qué se calcula el pivote: self, parent o absolute. La animación de escala no cambia las dimensiones reales del View — solo el renderizado.

RotateAnimation

RotateAnimation rota un View alrededor de un punto pivote en un ángulo desde fromDegrees hasta toDegrees. El ángulo se mide en grados: 0 es la posición original, 360 es una rotación completa. Para rotación infinita, usa repeatCount=INFINITE.

View Animation vs Property Animation

La diferencia entre View Animation y Property Animation (Animator) es una distinción fundamental en la arquitectura de animación de Android. View Animation opera solo sobre el renderizado, mientras que Property Animation cambia las propiedades reales del objeto mediante métodos setter, lo que lleva a actualizaciones del diseño.

CriterioView AnimationProperty Animation
Nivel de APIAPI 1+ (obsoleto)API 11+ (recomendado)
Qué animaRenderizado del View (canvas)Propiedades del objeto (setter)
Clic después de animaciónEn posición originalEn nueva posición
Tipos de animación4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsNo cambiaCambia mediante setLayoutParams
RendimientoAlto (solo canvas)Medio (depende del setter)

Configuración XML de animaciones

View Animation normalmente se define en archivos XML en res/anim/ con un elemento raíz (AnimationSet) o uno de los cuatro tipos. AnimationSet permite combinar animaciones con parámetros compartidos 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>

El archivo XML se carga mediante AnimationUtils.loadAnimation(). El Interpolator define cómo cambia el parámetro con el tiempo: accelerate, decelerate, bounce, overshoot. Un Interpolator personalizado se crea mediante el recurso XML @anim/interpolator_name.

Atributos Comunes

Todas las animaciones Tween admiten los atributos: duration (ms), startOffset (retraso antes de iniciar), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. El atributo fillAfter determina si el View permanece en el estado final de la animación después de completarse.

Ejemplos de código en Kotlin

Aunque las animaciones suelen definirse en XML, también se pueden crear programáticamente usando Kotlin. El enfoque programático es útil para parámetros dinámicos: el valor de opacidad depende del estado de la aplicación en lugar de definirse estáticamente.

kotlin
// Creación programática de AlphaAnimation en 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)
}

// Carga de animación desde XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)

// AnimationSet — combinación de animaciones
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)

El método startAnimation() añade la animación a la cola de renderizado del View. Para cancelarla, usa clearAnimation(). Importante: fillAfter=true no cambia LayoutParams — cuando se llama a startAnimation nuevamente, la animación comienza desde el estado original del View, no desde el último renderizado.

¿Cuándo usar View Animation?

View Animation tiene un ámbito de aplicación limitado en 2026: soporte para Android 4.x (API 16-19) donde Property Animation puede funcionar de manera inestable; efectos simples de aparición/desaparición que no requieren cambios de LayoutParams; animaciones donde el desajuste de clic no es crítico (por ejemplo, elementos de fondo). Para todos los demás casos, Google recomienda migrar a ObjectAnimator o AnimatorSet.

Según Android Developers, Property Animation es 15-20% más eficiente en memoria porque no crea fotogramas intermedios de canvas. Migrar de View Animation a Property Animation también elimina el problema de desajuste de clic: el View después de la animación recibe toques en su nueva posición.

Preguntas Frecuentes

¿En qué se diferencia View Animation de Property Animation?

View Animation solo cambia el renderizado del View — después de la animación, el View permanece en su posición original para eventos táctiles. Property Animation cambia las propiedades reales del objeto, lo que actualiza LayoutParams y maneja correctamente los clics en la nueva posición.

¿Por qué View Animation se considera obsoleta?

Google declaró View Animation obsoleta a partir de Android 3.0 (API 11). La razón es el desajuste de clic (click mismatch) y la imposibilidad de animar propiedades arbitrarias de objetos. Property Animation resuelve estos problemas y se recomienda para todos los proyectos nuevos.

¿Se puede usar View Animation para animar botones?

Se puede usar pero no se recomienda. Un botón después de TranslateAnimation aparecerá en una nueva ubicación, pero los clics se registrarán en la posición original. Para botones, usa Property Animation o un composable con AnimatedVisibility en Jetpack Compose.

¿Cómo cancelar View Animation programáticamente?

Llama a view.clearAnimation(). Si la animación se inició con fillAfter=true, el View permanecerá en su estado final. Para forzar el retorno al estado original, llama a clearAnimation() e invalidate().

Resumen

  • View Animation — un sistema heredado de animación Tween en Android con cuatro tipos: Alpha, Translate, Scale, Rotate
  • Marcado XML en res/anim/ con elementos , , , y raíz
  • AnimationSet combina animaciones con startOffset, duration, interpolator compartidos
  • Desajuste de clic — el View después de la animación permanece en la posición original para eventos táctiles
  • Property Animation — reemplazo moderno mediante ObjectAnimator, AnimatorSet, que trabaja con propiedades reales
  • fillAfter deja el View en su estado final pero no cambia LayoutParams
  • Migración a Property Animation elimina el desajuste de clic y mejora el rendimiento en un 15-20%

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también