View Animation — wat is het, Tween Animation in Android

Auteur: IT Sectr Gepubliceerd: 2026-03-01 Leestijd: 8 min

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 — View-animatie via Tween Animation: Alpha, Translate, Scale, Rotate
  • XML-definitie — animaties worden beschreven in res/anim/ met , , ,
  • AnimationSet — combinatie van meerdere animaties in één set met gemeenschappelijke parameters
  • Beperking — View Animation verandert geen eigenschappen, alleen weergave: View blijft op de oorspronkelijke positie
  • Property Animation — moderne vervanger (Animator) die werkt met echte eigenschappen van objecten

Wat is View Animation?

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.

Soorten Tween Animation

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

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.

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

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

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.

View Animation vs Property Animation

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.

CriteriumView AnimationProperty Animation
API-niveauAPI 1+ (verouderd)API 11+ (aanbevolen)
Wat animeertWeergave van View (canvas)Eigenschappen van object (setter)
Klik na animatieOp oorspronkelijke positieOp nieuwe positie
Animatiesoorten4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsVerandert nietVerandert via setLayoutParams
PrestatiesHoog (alleen canvas)Gemiddeld (afhankelijk van setter)

XML-configuratie van animaties

View Animation wordt meestal gedefinieerd in XML-bestanden in res/anim/ met het hoofdelement (AnimationSet) of een van de vier typen. AnimationSet maakt het mogelijk animaties te combineren met gemeenschappelijke parameters 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>

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.

Gemeenschappelijke attributen

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.

Codevoorbeelden in Kotlin

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.

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

Wanneer View Animation gebruiken?

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

Waarin verschilt View Animation van Property Animation?

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.

Waarom wordt View Animation als verouderd beschouwd?

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.

Kan View Animation worden gebruikt voor knapanimatie?

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.

Hoe annuleer ik View Animation programmatisch?

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

  • View Animation — verouderd Android Tween-animatiesysteem met vier typen: Alpha, Translate, Scale, Rotate
  • XML-definitie in res/anim/ met elementen , , , en hoofdelement
  • AnimationSet combineert animaties met gemeenschappelijke startOffset, duration, interpolator
  • Klikmismatch — View blijft na animatie voor aanraakgebeurtenissen op oorspronkelijke positie
  • Property Animation — moderne vervanger via ObjectAnimator, AnimatorSet, werkend met echte eigenschappen
  • fillAfter laat View in eindtoestand, maar verandert LayoutParams niet
  • Migratie naar Property Animation elimineert klikmismatch en verbetert prestaties met 15-20%

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.

Bespreek het project

Lees ook