Interpolator — wat is het, interpolatiecurven in Android

Auteur: IT Sectr Gepubliceerd: 2026-03-02 Leestijd: 8 min
Interpolator — een component van het Android Animation Framework dat de wiskundige curve van de verandering van de animatiewaarde in de tijd bepaalt. In plaats van lineaire beweging (object beweegt met constante snelheid) stelt Interpolator in staat de animatie te versnellen, vertragen of cyclisch te wijzigen, waardoor natuurlijk gedrag ontstaat. Android biedt 9 ingebouwde interpolators: AccelerateInterpolator, DecelerateInterpolator, AccelerateDecelerateInterpolator, AnticipateInterpolator, OvershootInterpolator, BounceInterpolator, CycleInterpolator, LinearInterpolator en PathInterpolator. Volgens de Android Developer Documentation vermindert het gebruik van niet-lineaire Interpolators de waargenomen animatietijd met 25–40% — de gebruiker ervaart de respons als vloeiender en responsiever. Bij IT Sectr gebruiken we AccelerateDecelerateInterpolator voor het verschijnen van elementen en OvershootInterpolator voor actieknoppen.

Belangrijkste punten

  • Interpolator — wiskundige functie die de lineaire voortgang van de animatie (0→1) omzet in een niet-lineaire snelheidscurve.
  • 9 ingebouwde interpolators in Android: van Linear tot Bounce — dekken 90% van de typische animatiescenario's.
  • PathInterpolator (API 21+) maakt het mogelijk een willekeurige Bezier-curve met twee controlepunt te definiëren.
  • TimeInterpolator — interface voor het maken van aangepaste interpolators met de methode getInterpolation().
  • AccelerateDecelerateInterpolator — symmetrische curve: versnelling aan het begin, vertraging aan het einde, de meest universele keuze.

Wat is Interpolator?

Interpolator — een interface in Android die de fractionele waarde van de animatievoortgang (van 0.0 tot 1.0) koppelt aan de werkelijke waarde met gewijzigde snelheid. Als de animatie 300 milliseconden duurt, roept het systeem Interpolator aan voor elk frame en geeft de huidige voortgang door. Interpolator retourneert een aangepaste waarde — bijvoorbeeld voor AccelerateInterpolator legt de animatie bij 50% van de tijd slechts ~25% van de weg af, wat versnelling simuleert.

Wiskundig kan Interpolator worden voorgesteld als functie f(t), waarbij t de genormaliseerde tijd [0, 1] is en f(t) de genormaliseerde waarde [0, 1] (of breder voor Overshoot/Bounce). De lineaire interpolator retourneert f(t) = t — het object beweegt met constante snelheid. AccelerateInterpolator benadert f(t) = t², DecelerateInterpolator — f(t) = 1 − (1 − t)², wat een vloeiende start of finish creëert. In het Android Animation Framework wordt Interpolator toegepast op zowel ValueAnimator als ObjectAnimator en ViewPropertyAnimator, wat een uniforme benadering van snelheidsbeheer op alle niveaus biedt.

Ingebouwde Android-interpolators

Android biedt 9 ingebouwde interpolators, elk met een eigen wiskundig model. De keuze van de interpolator bepaalt het karakter van de animatie: fysiekheid (Bounce), elasticiteit (Overshoot) of vloeiendheid (AccelerateDecelerate).

Interpolator Wiskunde Scenario
LinearInterpolator f(t) = t Voortgangsindicatoren, lopende band
AccelerateInterpolator f(t) = tⁿ (n=2) Element uit het scherm laten vliegen, verschijnen van onderaf
DecelerateInterpolator f(t) = 1 − (1 − t)ⁿ Vallen van object, binnenkomen van boven met vertraging
AccelerateDecelerateInterpolator Cos-benadering Universeel, verschijnen/verdwijnen van elementen
AnticipateInterpolator Kubisch met terugtrekking Veerachtige binnenkomst — object beweegt iets achteruit voor de start
OvershootInterpolator Kubisch met overschrijding Actieknop — overschrijdt de doelpositie iets
AnticipateOvershootInterpolator Combinatie Anticipate + Overshoot Kaarten — terugtrekking + overschrijding met terugkeer
BounceInterpolator Gedempte stuiteringen Bal, vallen van element op een oppervlak
PathInterpolator Kubische Bezier (2 controlepunten) Aangepaste curven voor het ontwerpsysteem

Elke interpolator heeft een XML-declaratie in res/interpolator/ en een Kotlin-klasse in het pakket android.view.animation. AccelerateDecelerateInterpolator — de meest gebruikte: zijn curve lijkt op de easing-functie ease-in-out in CSS. Voor Android-applicaties met Material Design wordt OvershootInterpolator aanbevolen voor floating action button (FAB) knoppen — het creëert een 'ophopingseffect' bij verschijnen.

PathInterpolator: aangepaste curven

PathInterpolator — interpolator op basis van een Bezier-curve, gedefinieerd via een Path-object. Beschikbaar vanaf API 21 (Android 5.0). Maakt het mogelijk de snelheidscurve visueel te ontwerpen — de ontwerper tekent de curve, de ontwikkelaar vertaalt deze naar code via de coördinaten van de controlepunten. Alleen kubische Bezier (twee controlepunten C1, C2) wordt ondersteund.

De PathInterpolator-curve begint altijd in punt (0,0) en eindigt in (1,1). De controlepunten bepalen de vorm: (x1, y1) — punt aan het begin, (x2, y2) — aan het einde. x-waarden moeten in het bereik [0,1] liggen — dit garandeert monotonie in de tijd. y-waarden kunnen buiten [0,1] vallen — dit creëert het effect van overschrijding (overshoot) of terugtrekking (anticipate). Standaard Material Design gebruikt bijvoorbeeld de fast-out-slow-in-curve met controlepunten (0.4, 0.0, 0.2, 1.0). Bij IT Sectr bouwen we aangepaste PathInterpolator voor elk ontwerpsysteem — dit garandeert uniformiteit van animaties op alle schermen.

Je eigen Interpolator maken

Als de ingebouwde interpolators het scenario niet dekken, maakt Android het mogelijk je eigen te maken door de interface TimeInterpolator te implementeren. De enige methode — getInterpolation(input: Float): Float. Input — huidige animatievoortgang van 0 tot 1; output — aangepaste waarde. Output kan buiten [0,1] vallen voor overschrijdings- of stuiter-effecten.

Typische aangepaste interpolators: bounce-effect met demping (buiten 1.0 en terugkeer), elastic-effect (sinusvormige demping), step-interpolator (discrete sprongen). Aangepaste interpolators kunnen ook via XML worden gedefinieerd met de tag <interpolator> en klasse-opgave. In Android Studio is er een ingebouwde Interpolator-preview in de Layout Inspector — toont de werkelijke curve voor de geselecteerde interpolator, wat debuggen vergemakkelijkt.

Codevoorbeelden in Kotlin

Voorbeeld 1: AccelerateDecelerateInterpolator met ValueAnimator

Basis animatie van de schaal van een knop met behulp van een symmetrische interpolator. ValueAnimator wijzigt de waarde van 1.0 naar 1.2 en terug, en AccelerateDecelerateInterpolator maakt de beweging vloeiend.

kotlin
import android.animation.ValueAnimator
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.View

fun View.pulseAnimation() {
    ValueAnimator.ofFloat(1.0f, 1.2f).apply {
        duration = 300
        interpolator = AccelerateDecelerateInterpolator()
        repeatCount = 1
        repeatMode = ValueAnimator.REVERSE

        addUpdateListener { animator ->
            val scale = animator.animatedValue as Float
            this@pulseAnimation.scaleX = scale
            this@pulseAnimation.scaleY = scale
        }

        start()
    }
}

AccelerateDecelerateInterpolator creëert een vloeiende toename aan het begin en een vloeiende terugkeer aan het einde. De methode REVERSE herhaalt de animatie in omgekeerde richting, waardoor een pulsatie-effect ontstaat. Dit patroon wordt gebruikt voor actieknoppen en trekt de aandacht van de gebruiker naar het belangrijkste interface-element.

Voorbeeld 2: PathInterpolator met aangepaste curve

Aangepaste curve met overshoot-effect — het object overschrijdt de doelpositie met 10% en keert terug. De controlepunten (0.4, 0.0, 0.6, 1.3) bepalen een versnelde binnenkomst met overschrijding.

kotlin
import android.animation.ObjectAnimator
import android.graphics.Path
import android.view.animation.PathInterpolator
import android.view.View

fun View.slideWithOvershoot() {
    val path = Path().apply {
        cubicTo(0.4f, 0.0f, 0.6f, 1.3f, 1.0f, 1.0f)
    }
    val interpolator = PathInterpolator(path)

    ObjectAnimator.ofFloat(this, "translationY", 200f, 0f).apply {
        duration = 400
        interpolator = interpolator
        start()
    }
}

PathInterpolator accepteert een Path met een kubische Bezier-curve. In het voorbeeld 'overschrijdt' het element de doelpositie (y=1.3 op 60% van de tijd) en keert terug naar het einde. Path moet strikt monotoon zijn langs de x-as, anders gaat de animatie achteruit. Gebruik voor verificatie de Layout Inspector in Android Studio.

Voorbeeld 3: Aangepaste BounceInterpolator

Eigen interpolator met gedempt stuiter-effect. Implementatie via TimeInterpolator met vier dempingscycli.

kotlin
import android.animation.TimeInterpolator

class DampedBounceInterpolator : TimeInterpolator {

    private val cycles = 4
    private val damping = 0.85f

    override fun getInterpolation(input: Float): Float {
        val t = input * cycles
        val decay = Math.pow(damping.toDouble(), cycles.toDouble()).toFloat()
        val peak = t - (Math.floor(t.toDouble())).toFloat()
        val bounce = Math.sin(peak * Math.PI).toFloat()
        return 1f - bounce * decay * (1f - input)
    }
}

De aangepaste DampedBounceInterpolator creëert 4 gedempte stuiteringen met een dempingscoëfficiënt van 0.85. De methode getInterpolation ontvangt lineaire input en retourneert een waarde met een 'veer'-effect. Bij IT Sectr gebruiken we deze interpolator voor de verschijningsanimatie van meldingen — de stuitering creëert een gevoel van fysiekheid en trekt de aandacht.

Veelgestelde vragen

Wat is het verschil tussen AccelerateDecelerateInterpolator en PathInterpolator?

AccelerateDecelerateInterpolator creëert een symmetrische curve — het object versnelt aan het begin en vertraagt aan het einde. PathInterpolator maakt het mogelijk een willekeurige curve te definiëren via Path met een controlepunt (kubische Bezier). Voor aangepaste animatie met asymmetrisch gedrag (bijv. snelle start + langzame finish) gebruik PathInterpolator met controlepunten (0.2, 0.8, 0.4, 1.0).

Kan ik een eigen Interpolator maken in Android?

Ja, implementeer de interface TimeInterpolator en overschrijf de methode getInterpolation(input: Float): Float. Input — fractionele waarde van 0 tot 1 (animatievoortgang), output — werkelijke waarde. Het bounce-effect wordt bijvoorbeeld geïmplementeerd door waarden groter dan 1 of kleiner dan 0 te retourneren voor veerachtig gedrag. Registreer de interpolator via de XML-tag of gebruik direct in code.

Is PathInterpolator beschikbaar op alle Android-versies?

PathInterpolator is toegevoegd in API 21 (Android 5.0 Lollipop). Gebruik voor oudere versies AccelerateDecelerateInterpolator of een aangepaste TimeInterpolator. PathInterpolator ondersteunt alleen kubische Bezier-curven met twee controlepunten — rechte lijnen en kwadratische curven kunnen onjuiste interpolatie geven. Gebruik voor achterwaartse compatibiliteit AccelerateDecelerateInterpolator als fallback.

Welke interpolator beveelt Material Design aan?

Material Design 3 beveelt de fast-out-slow-in curve aan met controlepunten (0.4, 0.0, 0.2, 1.0) voor het verschijnen van elementen, linear-out-slow-in (0.0, 0.0, 0.2, 1.0) voor verdwijnen en fast-out-linear-in (0.4, 0.0, 1.0, 1.0) voor beweging. In Android zijn deze curven geïmplementeerd in de klasse FastOutSlowInInterpolator uit de bibliotheek Material Components.

Beïnvloedt Interpolator de prestaties van de animatie?

Minimaal. Ingebouwde interpolators voeren één wiskundige bewerking per frame uit — overhead is onmerkbaar. Aangepaste interpolators met zware berekeningen (trigonometrie, loops) kunnen micro-jank veroorzaken op zwakkere apparaten. Optimaliseer door vooraf berekenen van waarden in de constructor of gebruik TimeInterpolator met caching.

Samenvatting

  • Interpolator — wiskundige functie die de lineaire voortgang van de animatie omzet in een niet-lineaire snelheidscurve, waardoor beweging natuurlijk wordt.
  • 9 ingebouwde Android-interpolators dekken 90% van de scenario's — van lineaire beweging tot fysieke stuiteringen.
  • PathInterpolator (API 21+) definieert een aangepaste Bezier-curve met twee controlepunten voor nauwkeurige animatiecontrole.
  • TimeInterpolator — interface voor het maken van eigen interpolators met willekeurige wiskunde.
  • Material Design beveelt fast-out-slow-in aan voor verschijnen, linear-out-slow-in voor verdwijnen van elementen.
  • AccelerateDecelerateInterpolator — universele keuze voor symmetrische animaties met vloeiend begin en einde.
  • Aangepaste interpolators met gedempte stuiteringen creëren fysiek gedrag voor meldingen en interactieve elementen.

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