View Animation ist ein veraltetes Animationssystem von Android API 1+, das mit View-Objekten durch Tween Animation (Alpha, Translate, Scale, Rotate) arbeitet. Google empfiehlt Property Animation (Animator) für alle neuen Projekte. Dieser Artikel erklärt die Prinzipien, Typen, XML-Markierung und Gründe für die Abkündigung.
Wichtige Punkte
View Animation ist ein Android-Animationssubsystem, das auf View-Ebene (API 1+) arbeitet. Es verwendet vier Arten von Tween Animation: AlphaAnimation (Transparenz), TranslateAnimation (Bewegung), ScaleAnimation (Skalierung) und RotateAnimation (Drehung). Jede Animation wird in einer XML-Datei im Ordner res/anim/ beschrieben oder programmatisch in Kotlin-Code erstellt.
Der View-Animation-Mechanismus ändert nicht die realen Eigenschaften eines Views — er zeichnet das View an einer neuen Position, Skalierung oder Transparenz neu, aber der onTouchEvent()-Callback empfängt die Koordinaten des ursprünglichen Standorts. Dies ist eine wichtige Einschränkung, die als Klickabweichung (click mismatch) bekannt ist.
Laut der Android-Entwicklerdokumentation (2026) hat Google View Animation ab Android 3.0 (API 11) als veraltete API markiert. Für neue Projekte wird Property Animation empfohlen — Animator, AnimatorSet und ObjectAnimator, die über Setter-Methoden mit echten Objekteigenschaften arbeiten.
Tween Animation ist eine Animation „zwischen“ Schlüsselbildern: Sie definieren den Anfangs- und Endzustand, und das System berechnet die Zwischenbilder. Android bietet vier Standardtypen, jeder mit seinem eigenen Parametersatz.
AlphaAnimation ändert die Transparenz eines Views von fromAlpha bis toAlpha. Die Werte reichen von 0.0 (vollständig transparent) bis 1.0 (vollständig sichtbar). Standardmäßig dauert die Animation 300 ms. Der Parameter fillAfter=true belässt das View im endgültigen Transparenzzustand.
<!-- 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 bewegt ein View von der Startposition (fromXDelta, fromYDelta) zur Endposition (toXDelta, toYDelta). Werte werden in Pixeln, Prozent des Eltern-Elements oder Prozent des Views selbst angegeben. Beispielsweise bedeutet 100% 100% der Breite des Views.
ScaleAnimation skaliert ein View relativ zum Punkt pivotX/pivotY. fromXScale=1.0, toXScale=2.0 verdoppelt die Breite. Der Parameter pivotType bestimmt, worauf sich der Drehpunkt bezieht: self, parent oder absolute. Die Skalierungsanimation ändert nicht die tatsächlichen Abmessungen des Views — nur die Darstellung.
RotateAnimation dreht ein View um einen Drehpunkt um einen Winkel von fromDegrees bis toDegrees. Der Winkel wird in Grad gemessen: 0 ist die ursprüngliche Position, 360 eine vollständige Drehung. Für unendliche Drehung verwenden Sie repeatCount=INFINITE.
Der Unterschied zwischen View Animation und Property Animation (Animator) ist ein grundlegender Unterschied in der Android-Animationsarchitektur. View Animation arbeitet nur auf der Darstellungsebene, während Property Animation die tatsächlichen Objekteigenschaften über Setter-Methoden ändert, was zu Layout-Aktualisierungen führt.
| Kriterium | View Animation | Property Animation |
|---|---|---|
| API-Level | API 1+ (veraltet) | API 11+ (empfohlen) |
| Was wird animiert | View-Darstellung (Canvas) | Objekteigenschaften (Setter) |
| Klick nach Animation | An ursprünglicher Position | An neuer Position |
| Animationstypen | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Ändert nicht | Ändert über setLayoutParams |
| Leistung | Hoch (nur Canvas) | Mittel (abhängig vom Setter) |
View Animation wird typischerweise in XML-Dateien in res/anim/ mit einem Wurzelelement
<!-- 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>Die XML-Datei wird über AnimationUtils.loadAnimation() geladen. Der Interpolator definiert, wie sich der Parameter im Laufe der Zeit ändert: accelerate, decelerate, bounce, overshoot. Ein benutzerdefinierter Interpolator wird über die XML-Ressource @anim/interpolator_name erstellt.
Alle Tween-Animationen unterstützen die Attribute: duration (ms), startOffset (Verzögerung vor Start), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Das Attribut fillAfter bestimmt, ob das View nach Abschluss im endgültigen Animationszustand verbleibt.
Obwohl Animationen normalerweise in XML definiert werden, können sie auch programmatisch mit Kotlin erstellt werden. Der programmatische Ansatz ist nützlich für dynamische Parameter: der Transparenzwert hängt vom Anwendungszustand ab, anstatt statisch definiert zu sein.
// Programmatische Erstellung von 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)
}
// Laden einer Animation aus XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — Kombination von Animationen
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)Die Methode startAnimation() fügt die Animation zur Darstellungswarteschlange des Views hinzu. Zum Abbrechen verwenden Sie clearAnimation(). Wichtig: fillAfter=true ändert LayoutParams nicht — wenn startAnimation erneut aufgerufen wird, beginnt die Animation vom ursprünglichen Zustand des Views, nicht vom zuletzt dargestellten.
View Animation hat im Jahr 2026 einen engen Anwendungsbereich: Unterstützung für Android 4.x (API 16-19), wo Property Animation instabil arbeiten kann; einfache Ein-/Ausblendeffekte, die keine LayoutParams-Änderungen erfordern; Animationen, bei denen Klickabweichung nicht kritisch ist (z. B. Hintergrundelemente). Für alle anderen Fälle empfiehlt Google die Umstellung auf ObjectAnimator oder AnimatorSet.
Laut Android Developers ist Property Animation 15-20% speichereffizienter, da es keine zwischengeschalteten Canvas-Frames erstellt. Der Wechsel von View Animation zu Property Animation beseitigt auch das Problem der Klickabweichung: Das View empfängt nach der Animation Berührungen an seiner neuen Position.
Häufig gestellte Fragen
View Animation ändert nur die Darstellung des Views — nach der Animation bleibt das View für Berührungsereignisse an seiner ursprünglichen Position. Property Animation ändert die tatsächlichen Eigenschaften des Objekts, aktualisiert LayoutParams und behandelt Klicks korrekt an der neuen Position.
Google hat View Animation ab Android 3.0 (API 11) als veraltet erklärt. Der Grund ist die Klickabweichung (click mismatch) und die Unfähigkeit, beliebige Objekteigenschaften zu animieren. Property Animation löst diese Probleme und wird für alle neuen Projekte empfohlen.
Es kann verwendet werden, wird aber nicht empfohlen. Eine Schaltfläche wird nach TranslateAnimation an einer neuen Position angezeigt, aber Klicks werden an der ursprünglichen Position registriert. Verwenden Sie für Schaltflächen Property Animation oder ein Composable mit AnimatedVisibility in Jetpack Compose.
Rufen Sie view.clearAnimation() auf. Wenn die Animation mit fillAfter=true gestartet wurde, bleibt das View in seinem endgültigen Zustand. Um die Rückkehr in den ursprünglichen Zustand zu erzwingen, rufen Sie clearAnimation() und invalidate() auf.
Zusammenfassung
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.
Lesen Sie auch