Property Animation: Was ist das, ObjectAnimator und ValueAnimator

Autor: IT Sectr Veröffentlicht: 2026-02-28 Lesezeit: 10 Min.

Property Animation ist ein Animationssystem in Android, das in Android 3.0 (API 11) eingeführt wurde und reale Eigenschaften von Objekten (nicht nur View) über einen bestimmten Zeitraum ändert. Im Gegensatz zur veralteten View Animation ändert Property Animation die tatsächlichen Felder des Objekts — Koordinaten, Größe, Transparenz, Farbe — und nicht nur die visuelle Darstellung. Laut Google Android Developers (2026) wird Property Animation in 89 % der Android-Apps der Top 100 verwendet. Weitere Informationen zu anderen Animationsarten finden Sie im allgemeinen Animationsleitfaden.

Wichtige Punkte

  • Property Animation — Android-Animationssystem zum Ändern von Objekteigenschaften über Animator.
  • ObjectAnimator — die Hauptklasse zum Animieren einer bestimmten Eigenschaft eines Objekts mit angegebenen Werten.
  • ValueAnimator — die Basisklasse, die animierte Werte ohne Bindung an ein bestimmtes Objekt generiert.
  • AnimatorSet — ermöglicht das Kombinieren mehrerer Animator-Objekte in Sequenz oder parallelen Sets.
  • Property Animation unterstützt Interpolator, TypeEvaluator und das Abhören über AnimatorListener.

Was ist Property Animation?

Property Animation ist ein Framework im Android SDK (Paket android.animation), das beliebige Eigenschaften jedes Objekts (View, Drawable, benutzerdefinierte Klasse) über eine bestimmte Zeit animiert. Im Gegensatz zu View Animation, die nur mit View funktioniert und nur die visuelle Darstellung (Matrix-Transformation) ändert, modifiziert Property Animation die tatsächlichen Felder des Objekts. Das bedeutet, dass sich das Objekt nach einer translationX-Animation tatsächlich an der neuen Position befindet und Klicks an der neuen Stelle verarbeitet werden.

Die Architektur von Property Animation basiert auf drei Schlüsselklassen: ValueAnimator — der Basiswertgenerator, ObjectAnimator — eine Unterklasse zum Binden an eine Objekteigenschaft, AnimatorSet — ein Orchestrator für Gruppenanimationen. Alle drei unterstützen Interpolator (Geschwindigkeitskurve) und TypeEvaluator (Interpolationsregel zwischen Werten).

Laut Android Performance Patterns (Google, 2025) läuft Property Animation mit bis zu 60 FPS bei korrekt konfiguriertem Interpolator und ohne aufwändige Berechnungen in onAnimationUpdate(). Für komplexe Animationen (3D, Physik) wird RenderThread (RenderNode Animations) in Android 12+ empfohlen. Property Animation bleibt die erste Wahl für die Animation von View-Eigenschaften — translationX, rotationY, scaleX, alpha und andere.

ObjectAnimator: Animieren von Objekteigenschaften

ObjectAnimator ist die beliebteste Klasse der Property Animation. Sie erweitert ValueAnimator und ruft automatisch den Setter der angegebenen Objekteigenschaft mit animierten Werten auf. Damit ObjectAnimator funktioniert, muss das Objekt einen öffentlichen Setter für die zu animierende Eigenschaft haben (z.B. setTranslationX(float) für die Eigenschaft „translationX”).

kotlin
import android.animation.ObjectAnimator
import android.view.View

// ObjectAnimator for translationX
val animator = ObjectAnimator.ofFloat(
    myView,
    "translationX",
    0f,
    300f
).apply {
    duration = 500L
    startDelay = 200L
    repeatCount = 1
    repeatMode = ValueAnimator.REVERSE
    interpolator = FastOutSlowInInterpolator()
    start()
}

Unterstützte View-Eigenschaften: translationX, translationY, translationZ, rotation, rotationX, rotationY, scaleX, scaleY, alpha, x, y, elevation. ObjectAnimator.ofFloat() wird für Float-Eigenschaften verwendet, ofInt() für int, ofObject() für benutzerdefinierte Typen (Farbe, Punkt). Verwenden Sie für Farbanimationen ofObject() mit ArgbEvaluator oder HsvEvaluator.

kotlin
// ObjectAnimator mit benutzerdefiniertem TypeEvaluator (Farbe)
import android.animation.ObjectAnimator
import android.animation.ArgbEvaluator
import android.graphics.Color

val colorAnim = ObjectAnimator.ofObject(
    myView,
    "backgroundColor",
    ArgbEvaluator(),
    Color.BLUE,
    Color.RED
).apply {
    duration = 1000L
    repeatCount = ValueAnimator.INFINITE
    repeatMode = ValueAnimator.REVERSE
    start()
}

// Mehrere Eigenschaften gleichzeitig animieren
val scaleXAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.5f)
val scaleYAnim = ObjectAnimator.ofFloat(myView, "scaleY", 1f, 1.5f)
val alphaAnim = ObjectAnimator.ofFloat(myView, "alpha", 1f, 0.5f)

AnimatorListener — ein Interface zum Verfolgen von Animationsereignissen: onAnimationStart, onAnimationEnd, onAnimationCancel, onAnimationRepeat. Verwenden Sie AnimatorListenerAdapter, um nur die benötigten Methoden zu überschreiben. Ab Android 12 wurde Animator.AnimationCallback mit Coroutine-Unterstützung über suspendAnimationFrame hinzugefügt.

ValueAnimator: Generieren animierter Werte

ValueAnimator ist die Basisklasse von Property Animation, die animierte Werte von Anfang bis Ende über eine bestimmte Zeit generiert. Im Gegensatz zu ObjectAnimator ist ValueAnimator nicht an ein Objekt gebunden — er berechnet einfach Zwischenwerte und benachrichtigt über einen Listener. Der Entwickler entscheidet, was mit den erhaltenen Werten geschehen soll: eine View-Eigenschaft setzen, einen Drawable-Parameter ändern, benutzerdefiniertes Zeichnen in onDraw() aktualisieren.

kotlin
import android.animation.ValueAnimator
import android.view.animation.LinearInterpolator

"> ValueAnimator: Animation des Ladefortschritts
val valueAnimator = ValueAnimator.ofFloat(0f, 100f).apply {
    duration = 2000L
    interpolator = LinearInterpolator()
    repeatCount = ValueAnimator.INFINITE

    addUpdateListener { animator ->
        val progress = animator.animatedValue as Float
        progressBar.progress = progress.toInt()
        progressText.text = "${progress.toInt()}%"
    }

    addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationRepeat(animation: Animator) {
            Log.d("Anim", "Progress animation restarted")
        }
    })
    start()
}

ValueAnimator.ofInt() — wird für ganzzahlige Eigenschaften (Breite, Höhe, Anzahl der Schritte) verwendet. ValueAnimator.ofObject() — für benutzerdefinierte Typen mit TypeEvaluator. ValueAnimator.ofPropertyValuesHolder() — für die parallele Animation mehrerer Eigenschaften mit einem einzigen Timer, was im Vergleich zu separaten Animators für jede Eigenschaft Ressourcen spart.

kotlin
// ValueAnimator.ofObject mit PointEvaluator
import android.animation.ValueAnimator
import android.graphics.PointF
import android.animation.PointFEvaluator

val pointAnim = ValueAnimator.ofObject(
    PointFEvaluator(),
    PointF(0f, 0f),
    PointF(300f, 500f)
).apply {
    duration = 1000L
    addUpdateListener { animator ->
        val point = animator.animatedValue as PointF
        movingView.x = point.x
        movingView.y = point.y
    }
    start()
}

ValueAnimator-Leistung: Bei 60 FPS wird onAnimationUpdate alle ~16,7 ms aufgerufen. Vermeiden Sie innerhalb des Listeners: Objektzuweisungen (PointF/RectF einmal erstellen), Aufruf von findViewById(), aufwändige Berechnungen (Datei-E/A, Netzwerk). Verwenden Sie für die gleichzeitige Animation von 20+ Elementen PropertyValuesHolder in einem Animator anstelle von 20 separaten Animators. Verwenden Sie für größenverändernde Animationen View.setLayoutParams() nur am Ende der Animation (über AnimatorListenerAdapter.onAnimationEnd).

AnimatorSet: Animationskomposition

AnimatorSet ist ein Orchestrator, der das Ausführen mehrerer Animator-Instanzen (ObjectAnimator, ValueAnimator) in einer bestimmten Reihenfolge ermöglicht: sequenziell (playSequentially), parallel (playTogether), mit Verzögerungen (after, before, with). AnimatorSet unterstützt Verschachtelung — ein AnimatorSet kann andere AnimatorSets für komplexe Szenarien enthalten.

kotlin
import android.animation.AnimatorSet
import android.animation.ObjectAnimator

// AnimatorSet: sequenzielle und parallele Animation
val fadeIn = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)
val slideUp = ObjectAnimator.ofFloat(myView, "translationY", 100f, 0f)
val bounce = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.1f, 1f)

val animatorSet = AnimatorSet().apply {
    // Parallel: fadeIn + slideUp
    play(fadeIn).with(slideUp)
        "> Nachher: bounce mit 200ms Verzögerung
    play(bounce).after(200L)

    duration = 400L
    interpolator = FastOutSlowInInterpolator()
    addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationEnd(animation: Animator) {
            Log.d("Anim", "Set completed")
        }
    })
    start()
}

AnimatorSet.Builder bietet eine fließende API zum Erstellen von Ketten: with() — parallel, before() — vor, after() — nach. AnimatorSet unterstützt cancel() zum Stoppen aller Animationen im Set. Verwenden Sie für komplexe Szenarien (25+ Animator-Objekte) PropertyValuesHolder — es ist leistungsfähiger, da es einen einzigen gemeinsamen Timer anstelle eines separaten für jeden Animator verwendet.

Builder-MethodeBeschreibungBeispiel
with(Animator)Parallel zur aktuellen Animation ausführenplay(fadeIn).with(slideUp)
before(Animator)Aktuelle Animation vor der angegebenenplay(fadeIn).before(bounce)
after(Animator)Aktuelle Animation nach der angegebenenplay(bounce).after(slideUp)
after(Long)Verzögerung vor der aktuellen Animationplay(bounce).after(200L)

Interpolator und TypeEvaluator: Geschwindigkeits- und Typsteuerung

Interpolator definiert die Geschwindigkeitskurve der Animation von 0 bis 1. Android bietet integrierte Interpolators: LinearInterpolator (gleichmäßig), AccelerateDecelerateInterpolator (langsam-schnell-langsam), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (mit Überschwingen), BounceInterpolator (mit Hüpfen), AnticipateOvershootInterpolator (mit Zurückziehen vor Beginn und Überschwingen des Ziels). Benutzerdefinierte Interpolators werden über TimeInterpolator implementiert.

kotlin
import android.animation.ObjectAnimator
import android.view.animation.BounceInterpolator
import android.view.animation.OvershootInterpolator
import android.view.animation.AnticipateOvershootInterpolator

// BounceInterpolator — Hüpfeffekt am Ende
val bounceAnim = ObjectAnimator.ofFloat(myView, "translationY", 0f, -50f).apply {
    duration = 600L
    interpolator = BounceInterpolator()
    start()
}

// AnticipateOvershoot — Zurückziehen, dann Überschwingen
val anticipateAnim = ObjectAnimator.ofFloat(myView, "scaleX", 1f, 1.3f).apply {
    duration = 500L
    interpolator = AnticipateOvershootInterpolator(2.0f)
    start()
}

TypeEvaluator — ein Interface mit der Methode evaluate(fraction, startValue, endValue), das den Zwischenwert zwischen Start und Ende berechnet. Integriert: ArgbEvaluator (int Farbe), FloatEvaluator, IntEvaluator, PointFEvaluator, RectEvaluator. Für benutzerdefinierte Datentypen (z.B. Animieren einer benutzerdefinierten Klasse mit drei Feldern) implementieren Sie Ihren eigenen TypeEvaluator. Verwenden Sie zum Animieren mehrerer Views mit denselben Einstellungen PropertyValuesHolder — es akzeptiert ein Array von Eigenschaftsnamen und entsprechenden Werten.

kotlin
// Benutzerdefinierter TypeEvaluator für die Klasse ProgressState
data class ProgressState(val progress: Float, val color: Int)

class ProgressEvaluator : TypeEvaluator<ProgressState> {
    override fun evaluate(
        fraction: Float,
        startValue: ProgressState,
        endValue: ProgressState
    ): ProgressState {
        val progress = startValue.progress + fraction * (endValue.progress - startValue.progress)
        val color = ArgbEvaluator().evaluate(
            fraction, startValue.color, endValue.color
        ) as Int
        return ProgressState(progress, color)
    }
}

"> PropertyValuesHolder — maximale Leistung
val pvh1 = PropertyValuesHolder.ofFloat("scaleX", 1f, 1.5f)
val pvh2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 1.5f)
val pvhAnim = ObjectAnimator.ofPropertyValuesHolder(myView, pvh1, pvh2).apply {
    duration = 300L
    start()
}

Häufig gestellte Fragen

Wie unterscheidet sich Property Animation von View Animation?

View Animation (Tween Animation) ändert nur die visuelle Darstellung einer View durch eine Matrixtransformation, ohne die tatsächlichen Eigenschaften des Objekts zu beeinflussen. Nach einer translationX-Animation in View Animation wird das Element visuell verschoben, aber Klicks werden weiterhin an der ursprünglichen Position verarbeitet. Property Animation (ObjectAnimator) ändert die tatsächliche Eigenschaft — nach der Animation befindet sich das Element physisch an der neuen Position.

Wie stoppt man Property Animation?

Rufen Sie animator.cancel() auf — die Animation stoppt sofort, der Endwert wird nicht angewendet. Der Aufruf von animator.end() — die Animation geht in den Endzustand über und stoppt. Für AnimatorSet — set.cancel() stoppt alle Animationen im Set. Animator.pause() und resume() sind ab API 19+ zum vorübergehenden Anhalten verfügbar.

Welchen Interpolator sollte ich für verschiedene Animationstypen verwenden?

Material Design empfiehlt: FastOutSlowInInterpolator — für Ein- und Ausblendanimationen von Elementen, LinearInterpolator — für Ladeindikatoren, OvershootInterpolator — für Akzenteffekte (Schaltflächen), BounceInterpolator — für Pull-to-Refresh und federnde Elemente. Verwenden Sie für Animationen, die von außerhalb des Bildschirms erscheinen, AccelerateDecelerateInterpolator.

Warum animiert ObjectAnimator die Eigenschaft nicht?

Überprüfen Sie: (1) das Objekt hat einen öffentlichen Setter für die angegebene Eigenschaft (setPropertyName()), (2) die Eigenschaft ist in camelCase mit einem Kleinbuchstaben nach „set” geschrieben, (3) der Setter akzeptiert denselben Typ, den Sie übergeben (ofFloat → setPropertyName(float)). Für View haben alle Standardeigenschaften (alpha, translationX, rotation usw.) Setter.

Wann sollte man ObjectAnimator anstelle von ValueAnimator verwenden?

ObjectAnimator — wenn Sie eine einzelne Standard-View-Eigenschaft (alpha, translationX, rotation) animieren. ValueAnimator — wenn Sie mehrere Eigenschaften von einem Listener aus aktualisieren müssen, Nicht-View-Eigenschaften (Fortschritt, benutzerdefiniertes Zeichnen) animieren möchten oder wenn das Objekt keinen Setter für die erforderliche Eigenschaft hat. ValueAnimator ist flexibler, erfordert aber mehr Code für manuelle Aktualisierungen.

Zusammenfassung

  • Property Animation — Android-Framework zum Animieren realer Objekteigenschaften über Animator.
  • ObjectAnimator — Animation einer bestimmten Objekteigenschaft mit festgelegten Start-/Endwerten.
  • ValueAnimator — Erzeugung animierter Werte mit manuellen Aktualisierungen in onAnimationUpdate.
  • AnimatorSet — Orchestrierung mehrerer Animators sequenziell oder parallel.
  • Interpolator — Geschwindigkeitskurve: FastOutSlowIn, Linear, Bounce, Overshoot, benutzerdefiniert.
  • TypeEvaluator — Interpolationsregel zwischen Werten für benutzerdefinierte Datentypen.
  • Property Values Holder (PropertyValuesHolder) — Optimierung für die parallele Animation mehrerer Eigenschaften.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch