View Animation — zastaralý systém animace Android API 1+, který pracuje s View objekty přes Tween Animation (Alpha, Translate, Scale, Rotate). Google doporučuje Property Animation (Animator) pro všechny nové projekty. Článek vysvětluje principy, typy, XML konfiguraci a důvody opuštění.
Hlavní body
View Animation — subsystém animace Androidu, který pracuje na úrovni View (API 1+). Používá čtyři typy Tween Animation: AlphaAnimation (průhlednost), TranslateAnimation (přesun), ScaleAnimation (měřítko) a RotateAnimation (otáčení). Každá animace je popsána v XML souboru ve složce res/anim/ nebo vytvořena programově v kódu Kotlin.
Mechanismus View Animation nemění skutečné vlastnosti View — překresluje View v nové pozici, měřítku nebo průhlednosti, ale zpětné volání onTouchEvent() přijímá souřadnice původního umístění. Toto je klíčové omezení, známé jako nesoulad kliknutí (click mismatch).
Podle Android Developer Documentation (2026) Google označuje View Animation jako zastaralé API od Android 3.0 (API 11). Pro nové projekty se doporučuje Property Animation — Animator, AnimatorSet a ObjectAnimator, které pracují se skutečnými vlastnostmi objektů přes setter metody.
Tween Animation — animace „mezi“ klíčovými snímky: nastavíte počáteční a koncový stav a systém vypočítá mezilehlé snímky. Android poskytuje čtyři standardní typy, každý s vlastní sadou parametrů.
AlphaAnimation mění průhlednost View od fromAlpha do toAlpha. Hodnoty od 0.0 (zcela průhledné) do 1.0 (zcela viditelné). Ve výchozím nastavení animace trvá 300 ms. Parametr fillAfter=true ponechá View v konečném stavu průhlednosti.
<!-- 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 přesouvá View z počáteční pozice (fromXDelta, fromYDelta) do koncové pozice (toXDelta, toYDelta). Hodnoty se udávají v pixelech, procentech rodiče nebo procentech samotného View. Například 100% znamená 100% šířky View.
ScaleAnimation škáluje View vzhledem k bodu pivotX/pivotY. fromXScale=1.0, toXScale=2.0 zdvojnásobuje šířku. Parametr pivotType určuje, vzhledem k čemu se pivot počítá: self, parent nebo absolute. Animace měřítka nemění skutečné rozměry View — pouze vykreslování.
RotateAnimation otáčí View kolem bodu pivot o úhel od fromDegrees do toDegrees. Úhel se měří ve stupních: 0 — výchozí poloha, 360 — plné otočení. Pro nekonečné otáčení použijte repeatCount=INFINITE.
Rozdíl mezi View Animation a Property Animation (Animator) — zásadní rozdíl v architektuře animace Androidu. View Animation operuje pouze na vykreslování, Property Animation mění skutečné vlastnosti objektu přes setter metody, což vede k aktualizaci rozvržení.
| Kritérium | View Animation | Property Animation |
|---|---|---|
| Úroveň API | API 1+ (zastaralé) | API 11+ (doporučené) |
| Co animuje | Vykreslování View (canvas) | Vlastnosti objektu (setter) |
| Kliknutí po animaci | Na původní pozici | Na nové pozici |
| Typy animací | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Nemění | Mění přes setLayoutParams |
| Výkon | Vysoký (pouze canvas) | Střední (závisí na setter) |
View Animation se obvykle definuje v XML souborech res/anim/ s kořenovým prvkem
<!-- 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>XML soubor se načítá přes AnimationUtils.loadAnimation(). Interpolator určuje zákon změny parametru v čase: accelerate, decelerate, bounce, overshoot. Vlastní Interpolator se vytváří přes XML zdroj @anim/interpolator_name.
Všechny Tween animace podporují atributy: duration (ms), startOffset (zpoždění před začátkem), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Atribut fillAfter určuje, zda View zůstane v konečném stavu animace po dokončení.
Ačkoli jsou animace obvykle definovány v XML, lze je vytvářet i programově přes Kotlin. Programový přístup je užitečný pro dynamické parametry: hodnota průhlednosti závisí na stavu aplikace, není staticky určena.
// Programové vytvoření AlphaAnimation v Kotlinu
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)
}
// Načtení animace z XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — kombinace animací
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)Metoda startAnimation() přidá animaci do fronty vykreslování View. Pro zrušení se používá clearAnimation(). Důležité: fillAfter=true nemění LayoutParams — při opětovném volání startAnimation začíná animace z počátečního stavu View, nikoli z posledního vykresleného stavu.
View Animation má v roce 2026 úzkou oblast použití: podpora Android 4.x (API 16-19), kde Property Animation může pracovat nestabilně; jednoduché efekty objevení/zmizení, které nevyžadují změnu LayoutParams; animace, kde nesoulad kliknutí není kritický (například prvky na pozadí). Pro všechny ostatní případy Google doporučuje přechod na ObjectAnimator nebo AnimatorSet.
Podle Android Developers je Property Animation o 15-20% efektivnější z hlediska využití paměti, protože nevytváří mezilehlé canvas snímky. Přechod z View Animation na Property Animation také odstraňuje problém nesouladu kliknutí: View po animaci přijímá dotyky na nové pozici.
Často kladené otázky
View Animation mění pouze vykreslování View — po animaci View zůstává na původní pozici pro události dotyku. Property Animation mění skutečné vlastnosti objektu, což aktualizuje LayoutParams a správně zpracovává kliknutí na nové pozici.
Google prohlásil View Animation za zastaralé od Android 3.0 (API 11). Důvod — nesoulad kliknutí (click mismatch) a nemožnost animovat libovolné vlastnosti objektů. Property Animation tyto problémy řeší a je doporučeno pro všechny nové projekty.
Lze použít, ale nedoporučuje se. Tlačítko po TranslateAnimation se zobrazí na novém místě, ale kliknutí budou fungovat na původní pozici. Pro tlačítka použijte Property Animation nebo komponent s AnimatedVisibility v Jetpack Compose.
Zavolejte view.clearAnimation(). Pokud byla animace spuštěna s fillAfter=true, View zůstane v konečném stavu. Pro vynucený návrat do počátečního stavu zavolejte clearAnimation() a invalidate().
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také