View Animation est un système d'animation hérité d'Android API 1+ qui fonctionne avec des objets View via Tween Animation (Alpha, Translate, Scale, Rotate). Google recommande Property Animation (Animator) pour tous les nouveaux projets. Cet article explique les principes, les types, le balisage XML et les raisons de son abandon.
Points clés
View Animation est un sous-système d'animation Android qui opère au niveau View (API 1+). Il utilise quatre types de Tween Animation : AlphaAnimation (opacité), TranslateAnimation (déplacement), ScaleAnimation (échelle) et RotateAnimation (rotation). Chaque animation est décrite dans un fichier XML dans le dossier res/anim/ ou créée par programmation en Kotlin.
Le mécanisme View Animation ne modifie pas les propriétés réelles d'un View — il redessine le View dans une nouvelle position, échelle ou opacité, mais le rappel onTouchEvent() reçoit les coordonnées de l'emplacement d'origine. Il s'agit d'une limitation clé connue sous le nom de décalage de clic (click mismatch).
Selon la Documentation Développeur Android (2026), Google a marqué View Animation comme une API obsolète à partir d'Android 3.0 (API 11). Pour les nouveaux projets, Property Animation est recommandée — Animator, AnimatorSet et ObjectAnimator, qui travaillent avec les propriétés réelles des objets via des méthodes setter.
Tween Animation est une animation « entre » des images clés : vous définissez l'état de début et de fin, et le système calcule les images intermédiaires. Android fournit quatre types standard, chacun avec son propre ensemble de paramètres.
AlphaAnimation modifie l'opacité d'un View de fromAlpha à toAlpha. Les valeurs vont de 0.0 (complètement transparent) à 1.0 (complètement visible). Par défaut, l'animation dure 300 ms. Le paramètre fillAfter=true laisse le View dans l'état d'opacité 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 déplace un View de la position de départ (fromXDelta, fromYDelta) à la position d'arrivée (toXDelta, toYDelta). Les valeurs sont spécifiées en pixels, en pourcentages du parent ou en pourcentages du View lui-même. Par exemple, 100 % signifie 100 % de la largeur du View.
ScaleAnimation met à l'échelle un View par rapport au point pivotX/pivotY. fromXScale=1.0, toXScale=2.0 double la largeur. Le paramètre pivotType détermine par rapport à quoi le pivot est calculé : self, parent ou absolute. L'animation d'échelle ne modifie pas les dimensions réelles du View — seulement le rendu.
RotateAnimation fait pivoter un View autour d'un point pivot d'un angle de fromDegrees à toDegrees. L'angle est mesuré en degrés : 0 est la position d'origine, 360 est une rotation complète. Pour une rotation infinie, utilisez repeatCount=INFINITE.
La différence entre View Animation et Property Animation (Animator) est une distinction fondamentale dans l'architecture d'animation Android. View Animation opère uniquement sur le rendu, tandis que Property Animation modifie les propriétés réelles de l'objet via des méthodes setter, ce qui entraîne des mises à jour de la mise en page.
| Critère | View Animation | Property Animation |
|---|---|---|
| Niveau d'API | API 1+ (obsolète) | API 11+ (recommandé) |
| Ce qui est animé | Rendu du View (canvas) | Propriétés de l'objet (setter) |
| Clic après animation | À la position d'origine | À la nouvelle position |
| Types d'animations | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Ne modifie pas | Modifie via setLayoutParams |
| Performances | Élevées (canvas uniquement) | Moyennes (dépend du setter) |
View Animation est généralement définie dans des fichiers XML dans res/anim/ avec un élément racine
<!-- 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>Le fichier XML est chargé via AnimationUtils.loadAnimation(). L'Interpolator définit comment le paramètre change dans le temps : accelerate, decelerate, bounce, overshoot. Un Interpolator personnalisé est créé via la ressource XML @anim/interpolator_name.
Toutes les animations Tween prennent en charge les attributs : duration (ms), startOffset (délai avant le début), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. L'attribut fillAfter détermine si le View reste dans l'état final de l'animation après son achèvement.
Bien que les animations soient généralement définies en XML, elles peuvent également être créées par programmation en utilisant Kotlin. L'approche programmatique est utile pour les paramètres dynamiques : la valeur d'opacité dépend de l'état de l'application plutôt que d'être définie statiquement.
// Création programmatique d'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)
}
// Chargement d'une animation depuis XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — combinaison d'animations
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)La méthode startAnimation() ajoute l'animation à la file d'attente de rendu du View. Pour l'annuler, utilisez clearAnimation(). Important : fillAfter=true ne modifie pas LayoutParams — lorsque startAnimation est appelé à nouveau, l'animation commence à partir de l'état d'origine du View, pas du dernier état rendu.
View Animation a un champ d'application étroit en 2026 : prise en charge d'Android 4.x (API 16-19) où Property Animation peut fonctionner de manière instable ; effets simples d'apparition/disparition ne nécessitant pas de modifications LayoutParams ; animations où le décalage de clic n'est pas critique (par exemple, éléments d'arrière-plan). Pour tous les autres cas, Google recommande de passer à ObjectAnimator ou AnimatorSet.
Selon Android Developers, Property Animation est 15 à 20 % plus efficace en mémoire car elle ne crée pas d'images canvas intermédiaires. Passer de View Animation à Property Animation élimine également le problème de décalage de clic : le View après l'animation reçoit les touches à sa nouvelle position.
Questions fréquentes
View Animation modifie uniquement le rendu du View — après l'animation, le View reste à sa position d'origine pour les événements tactiles. Property Animation modifie les propriétés réelles de l'objet, ce qui met à jour LayoutParams et gère correctement les clics à la nouvelle position.
Google a déclaré View Animation obsolète à partir d'Android 3.0 (API 11). La raison est le décalage de clic (click mismatch) et l'incapacité d'animer des propriétés arbitraires d'objets. Property Animation résout ces problèmes et est recommandée pour tous les nouveaux projets.
On peut l'utiliser mais ce n'est pas recommandé. Un bouton après TranslateAnimation apparaîtra à un nouvel emplacement, mais les clics seront enregistrés à la position d'origine. Pour les boutons, utilisez Property Animation ou un composable avec AnimatedVisibility dans Jetpack Compose.
Appelez view.clearAnimation(). Si l'animation a été démarrée avec fillAfter=true, le View restera dans son état final. Pour forcer le retour à l'état d'origine, appelez clearAnimation() et invalidate().
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi