View Animation — co to je, Tween Animation v Androidu

Autor: IT Sectr Publikováno: 2026-03-01 Doba čtení: 8 min

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 — animace View přes Tween Animation: Alpha, Translate, Scale, Rotate
  • XML definice — animace se popisují v res/anim/ pomocí , , ,
  • AnimationSet — kombinace několika animací v jedné sadě se společnými parametry
  • Omezení — View Animation nemění vlastnosti, pouze vykreslování: View zůstává na původní pozici
  • Property Animation — moderní náhrada (Animator), pracující se skutečnými vlastnostmi objektů

Co je View Animation?

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.

Typy Tween Animation

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

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.

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

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

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.

View Animation vs Property Animation

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ériumView AnimationProperty Animation
Úroveň APIAPI 1+ (zastaralé)API 11+ (doporučené)
Co animujeVykreslování View (canvas)Vlastnosti objektu (setter)
Kliknutí po animaciNa původní poziciNa nové pozici
Typy animací4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsNeměníMění přes setLayoutParams
VýkonVysoký (pouze canvas)Střední (závisí na setter)

XML konfigurace animací

View Animation se obvykle definuje v XML souborech res/anim/ s kořenovým prvkem (AnimationSet) nebo jedním ze čtyř typů. AnimationSet umožňuje kombinovat animace se společnými parametry 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>

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.

Společné atributy

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

Příklady kódu v Kotlinu

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.

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

Kdy použít View Animation?

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

Čím se liší View Animation od Property Animation?

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.

Proč je View Animation považováno za zastaralé?

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 View Animation pro animaci tlačítek?

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.

Jak zrušit View Animation programově?

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í

  • View Animation — zastaralý systém Tween animací Androidu se čtyřmi typy: Alpha, Translate, Scale, Rotate
  • XML definice v res/anim/ s prvky , , , a kořenem
  • AnimationSet kombinuje animace se společným startOffset, duration, interpolator
  • Nesoulad kliknutí — View po animaci zůstává na původní pozici pro události dotyku
  • Property Animation — moderní náhrada přes ObjectAnimator, AnimatorSet, pracující se skutečnými vlastnostmi
  • fillAfter ponechá View v konečném stavu, ale nemění LayoutParams
  • Migrace na Property Animation odstraňuje nesoulad kliknutí a zlepšuje výkon o 15-20%

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

Prodiskutovat projekt

Přečtěte si také