View Animation — een verouderd animatiesysteem van Android API 1+ dat werkt met View-objecten via Tween Animation (Alpha, Translate, Scale, Rotate). Google beveelt Property Animation (Animator) aan voor alle nieuwe projecten. Het artikel legt de principes, typen, XML-configuratie en redenen voor afschaffing uit.
Belangrijkste
View Animation — het Android-animatiesubsysteem dat werkt op View-niveau (API 1+). Het gebruikt vier typen Tween Animation: AlphaAnimation (transparantie), TranslateAnimation (verplaatsing), ScaleAnimation (schaal) en RotateAnimation (rotatie). Elke animatie wordt beschreven in een XML-bestand in de map res/anim/ of programmatisch gemaakt in Kotlin-code.
Het View Animation-mechanisme verandert de echte eigenschappen van View niet — het tekent View opnieuw in een nieuwe positie, schaal of transparantie, maar de callback onTouchEvent() ontvangt coördinaten van de oorspronkelijke locatie. Dit is een belangrijke beperking, bekend als klikmismatch (click mismatch).
Volgens Android Developer Documentation (2026) markeert Google View Animation als verouderde API vanaf Android 3.0 (API 11). Voor nieuwe projecten wordt Property Animation aanbevolen — Animator, AnimatorSet en ObjectAnimator, die werken met echte eigenschappen van objecten via setter-methoden.
Tween Animation — animatie „tussen“ sleutelframes: u bepaalt de begin- en eindtoestand en het systeem berekent de tussenliggende frames. Android biedt vier standaardtypen, elk met een eigen set parameters.
AlphaAnimation verandert de transparantie van View van fromAlpha naar toAlpha. Waarden van 0.0 (volledig transparant) tot 1.0 (volledig zichtbaar). Standaard duurt de animatie 300 ms. De parameter fillAfter=true laat View in de eindtoestand van transparantie.
<!-- 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 verplaatst View van de beginpositie (fromXDelta, fromYDelta) naar de eindpositie (toXDelta, toYDelta). Waarden worden gegeven in pixels, procenten van de ouder of procenten van View zelf. Bijvoorbeeld 100% betekent 100% van de breedte van View.
ScaleAnimation schaalt View ten opzichte van het punt pivotX/pivotY. fromXScale=1.0, toXScale=2.0 verdubbelt de breedte. De parameter pivotType bepaalt ten opzichte waarvan pivot wordt berekend: self, parent of absolute. Schaalanimatie verandert de echte afmetingen van View niet — alleen de weergave.
RotateAnimation roteert View rond het punt pivot met een hoek van fromDegrees tot toDegrees. De hoek wordt gemeten in graden: 0 — beginpositie, 360 — volledige rotatie. Gebruik repeatCount=INFINITE voor oneindige rotatie.
Het verschil tussen View Animation en Property Animation (Animator) — een fundamenteel verschil in de Android-animatiearchitectuur. View Animation werkt alleen op weergave, Property Animation verandert de echte eigenschappen van het object via setter-methoden, wat leidt tot het bijwerken van de layout.
| Criterium | View Animation | Property Animation |
|---|---|---|
| API-niveau | API 1+ (verouderd) | API 11+ (aanbevolen) |
| Wat animeert | Weergave van View (canvas) | Eigenschappen van object (setter) |
| Klik na animatie | Op oorspronkelijke positie | Op nieuwe positie |
| Animatiesoorten | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Verandert niet | Verandert via setLayoutParams |
| Prestaties | Hoog (alleen canvas) | Gemiddeld (afhankelijk van setter) |
View Animation wordt meestal gedefinieerd in XML-bestanden in res/anim/ met het hoofdelement
<!-- 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>Het XML-bestand wordt geladen via AnimationUtils.loadAnimation(). Interpolator bepaalt de wet van verandering van de parameter in de tijd: accelerate, decelerate, bounce, overshoot. Een aangepaste Interpolator wordt gemaakt via de XML-bron @anim/interpolator_name.
Alle Tween-animaties ondersteunen attributen: duration (ms), startOffset (vertraging voor start), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Het attribuut fillAfter bepaalt of View in de eindtoestand van de animatie blijft na voltooiing.
Hoewel animaties meestal worden gedefinieerd in XML, kunnen ze ook programmatisch worden gemaakt via Kotlin. De programmatische aanpak is nuttig voor dynamische parameters: de transparantiewaarde hangt af van de toestand van de app, niet statisch bepaald.
// Programmatisch maken van AlphaAnimation in 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)
}
// Animatie laden vanuit XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — combinatie van animaties
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)De methode startAnimation() voegt de animatie toe aan de weergavewachtrij van View. Voor annuleren wordt clearAnimation() gebruikt. Belangrijk: fillAfter=true verandert LayoutParams niet — bij herhaalde aanroep van startAnimation begint de animatie vanuit de begintoestand van View, niet vanuit de laatste weergegeven toestand.
View Animation heeft in 2026 een beperkt toepassingsgebied: ondersteuning voor Android 4.x (API 16-19), waar Property Animation onstabiel kan werken; eenvoudige verschijn/verdwijneffecten die geen wijziging van LayoutParams vereisen; animaties waarin klikmismatch niet kritisch is (bijvoorbeeld achtergrondelementen). Voor alle andere gevallen beveelt Google overstap naar ObjectAnimator of AnimatorSet aan.
Volgens Android Developers is Property Animation 15-20% efficiënter in geheugengebruik omdat het geen tussenliggende canvasframes maakt. Overstap van View Animation naar Property Animation elimineert ook het klikmismatch-probleem: View ontvangt aanrakingen op de nieuwe positie na animatie.
Veelgestelde vragen
View Animation verandert alleen de weergave van View — na animatie blijft View op de oorspronkelijke positie voor aanraakgebeurtenissen. Property Animation verandert de echte eigenschappen van het object, wat LayoutParams bijwerkt en klikken correct verwerkt op de nieuwe positie.
Google heeft View Animation verouderd verklaard vanaf Android 3.0 (API 11). Reden — klikmismatch (click mismatch) en onmogelijkheid om willekeurige eigenschappen van objecten te animeren. Property Animation lost deze problemen op en wordt aanbevolen voor alle nieuwe projecten.
Het kan worden gebruikt maar wordt niet aanbevolen. Een knop na TranslateAnimation wordt op een nieuwe locatie weergegeven, maar klikken werken op de oorspronkelijke positie. Gebruik voor knoppen Property Animation of de component met AnimatedVisibility in Jetpack Compose.
Roep view.clearAnimation() aan. Als de animatie is gestart met fillAfter=true, blijft View in de eindtoestand. Voor gedwongen terugkeer naar de begintoestand roept u clearAnimation() en invalidate() aan.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook