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 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.
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 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.
<!-- 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 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 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 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.
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.
| Criterio | View Animation | Property Animation |
|---|---|---|
| Nivel de API | API 1+ (obsoleto) | API 11+ (recomendado) |
| Qué anima | Renderizado del View (canvas) | Propiedades del objeto (setter) |
| Clic después de animación | En posición original | En nueva posición |
| Tipos de animación | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | No cambia | Cambia mediante setLayoutParams |
| Rendimiento | Alto (solo canvas) | Medio (depende del setter) |
View Animation normalmente se define en archivos XML en res/anim/ con un elemento raíz
<!-- 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.
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.
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.
// 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.
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
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.
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 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.
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
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.
Lea también