View Animation — co to jest, Tween Animation w Androidzie

Autor: IT Sectr Opublikowano: 2026-03-01 Czas czytania: 8 min

View Animation — przestarzały system animacji Android API 1+, działający z obiektami View poprzez Tween Animation (Alpha, Translate, Scale, Rotate). Google zaleca Property Animation (Animator) dla wszystkich nowych projektów. Artykuł wyjaśnia zasady, typy, konfigurację XML i przyczyny rezygnacji.

Najważniejsze

  • View Animation — animacja View przez Tween Animation: Alpha, Translate, Scale, Rotate
  • Definicja XML — animacje opisuje się w res/anim/ za pomocą , , ,
  • AnimationSet — kombinacja kilku animacji w jednym zestawie ze wspólnymi parametrami
  • Ograniczenie — View Animation zmienia nie właściwości, a tylko renderowanie: View pozostaje w oryginalnej pozycji
  • Property Animation — nowoczesny zamiennik (Animator), działający z rzeczywistymi właściwościami obiektów

Co to jest View Animation?

View Animation — podsystem animacji Android, działający na poziomie View (API 1+). Wykorzystuje cztery typy Tween Animation: AlphaAnimation (przezroczystość), TranslateAnimation (przesunięcie), ScaleAnimation (skalowanie) i RotateAnimation (obrót). Każda animacja jest opisana w pliku XML w folderze res/anim/ lub tworzona programowo w kodzie Kotlin.

Mechanizm View Animation nie zmienia rzeczywistych właściwości View — przerysowuje View w nowej pozycji, skali lub przezroczystości, ale wywołanie zwrotne onTouchEvent() przyjmuje współrzędne oryginalnego położenia. To kluczowe ograniczenie, znane jako niezgodność kliknięcia (click mismatch).

Według Android Developer Documentation (2026), Google oznacza View Animation jako przestarzały API, począwszy od Android 3.0 (API 11). Dla nowych projektów zaleca się Property Animation — Animator, AnimatorSet i ObjectAnimator, które działają z rzeczywistymi właściwościami obiektów poprzez metody setter.

Rodzaje Tween Animation

Tween Animation — animacja „pomiędzy“ kluczowymi klatkami: określasz stan początkowy i końcowy, a system oblicza klatki pośrednie. Android udostępnia cztery standardowe typy, każdy z własnym zestawem parametrów.

AlphaAnimation

AlphaAnimation zmienia przezroczystość View od fromAlpha do toAlpha. Wartości od 0.0 (całkowicie przezroczyste) do 1.0 (całkowicie widoczne). Domyślnie animacja trwa 300 ms. Parametr fillAfter=true pozostawia View w końcowym stanie przezroczystości.

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 przesuwa View z pozycji początkowej (fromXDelta, fromYDelta) do końcowej (toXDelta, toYDelta). Wartości podaje się w pikselach, procentach rodzica lub procentach samego View. Na przykład 100% oznacza 100% szerokości View.

ScaleAnimation

ScaleAnimation skaluje View względem punktu pivotX/pivotY. fromXScale=1.0, toXScale=2.0 zwiększa szerokość dwukrotnie. Parametr pivotType określa, względem czego liczony jest pivot: self, parent lub absolute. Animacja skali nie zmienia rzeczywistych rozmiarów View — tylko renderowanie.

RotateAnimation

RotateAnimation obraca View wokół punktu pivot o kąt od fromDegrees do toDegrees. Kąt mierzony jest w stopniach: 0 — pozycja wyjściowa, 360 — pełny obrót. Do nieskończonego obrotu użyj repeatCount=INFINITE.

View Animation vs Property Animation

Różnica między View Animation a Property Animation (Animator) — fundamentalna różnica w architekturze animacji Android. View Animation operuje tylko na renderowaniu, Property Animation zmienia rzeczywiste właściwości obiektu poprzez metody setter, co prowadzi do aktualizacji układu.

KryteriumView AnimationProperty Animation
Poziom APIAPI 1+ (przestarzały)API 11+ (zalecany)
Co animujeRenderowanie View (canvas)Właściwości obiektu (setter)
Kliknięcie po animacjiW oryginalnej pozycjiW nowej pozycji
Rodzaje animacji4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsNie zmieniaZmienia przez setLayoutParams
WydajnośćWysoka (tylko canvas)Średnia (zależy od setter)

Konfiguracja XML animacji

View Animation zwykle definiuje się w plikach XML res/anim/ z elementem głównym (AnimationSet) lub jednym z czterech typów. AnimationSet pozwala łączyć animacje ze wspólnymi parametrami 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>

Plik XML ładuje się przez AnimationUtils.loadAnimation(). Interpolator określa sposób zmiany parametru w czasie: accelerate, decelerate, bounce, overshoot. Niestandardowy Interpolator tworzy się przez zasób XML @anim/interpolator_name.

Wspólne atrybuty

Wszystkie animacje Tween obsługują atrybuty: duration (ms), startOffset (opóźnienie przed rozpoczęciem), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Atrybut fillAfter określa, czy View pozostaje w końcowym stanie animacji po zakończeniu.

Przykłady kodu w Kotlin

Mimo że animacje są zwykle definiowane w XML, można je tworzyć również programowo przez Kotlin. Podejście programowe jest przydatne dla dynamicznych parametrów: wartość przezroczystości zależy od stanu aplikacji, a nie jest określona statycznie.

kotlin
// Programistyczne tworzenie AlphaAnimation w Kotlinie
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)
}

// Wczytywanie animacji z XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)

// AnimationSet — kombinacja animacji
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() dodaje animację do kolejki renderowania View. Do anulowania używa się clearAnimation(). Ważne: fillAfter=true nie zmienia LayoutParams — przy ponownym wywołaniu startAnimation animacja zaczyna się od początkowego stanu View, a nie od ostatniego wyrenderowanego.

Kiedy stosować View Animation?

View Animation ma wąski zakres zastosowania w 2026 roku: obsługa Android 4.x (API 16-19), gdzie Property Animation może działać niestabilnie; proste efekty pojawiania/znikania, które nie wymagają zmiany LayoutParams; animacje, w których niezgodność kliknięcia nie jest krytyczna (na przykład elementy tła). We wszystkich pozostałych przypadkach Google zaleca przejście na ObjectAnimator lub AnimatorSet.

Według Android Developers, Property Animation jest o 15-20% bardziej efektywna pod względem zużycia pamięci, ponieważ nie tworzy pośrednich klatek canvas. Przejście z View Animation na Property Animation eliminuje również problem niezgodności kliknięcia: View po animacji przyjmuje dotknięcia w nowej pozycji.

Często zadawane pytania

Czym różni się View Animation od Property Animation?

View Animation zmienia tylko renderowanie View — po animacji View pozostaje w oryginalnej pozycji dla zdarzeń dotyku. Property Animation zmienia rzeczywiste właściwości obiektu, co aktualizuje LayoutParams i poprawnie obsługuje kliknięcia w nowym położeniu.

Dlaczego View Animation jest uważana za przestarzałą?

Google ogłosiła View Animation jako przestarzałą od Android 3.0 (API 11). Powód — niezgodność kliknięcia (click mismatch) i niemożność animowania dowolnych właściwości obiektów. Property Animation rozwiązuje te problemy i jest zalecana dla wszystkich nowych projektów.

Czy można używać View Animation do animacji przycisków?

Używać można, ale nie jest zalecane. Przycisk po TranslateAnimation będzie wyświetlany w nowym miejscu, ale kliknięcia będą działać w oryginalnej pozycji. Dla przycisków używaj Property Animation lub komponentu z AnimatedVisibility w Jetpack Compose.

Jak anulować View Animation programowo?

Wywołaj view.clearAnimation(). Jeśli animacja została uruchomiona z fillAfter=true, View pozostanie w stanie końcowym. Aby wymusić powrót do stanu początkowego, wywołaj clearAnimation() i invalidate().

Podsumowanie

  • View Animation — przestarzały system animacji Tween Android z czterema typami: Alpha, Translate, Scale, Rotate
  • Definicja XML w res/anim/ z elementami , , , i głównym
  • AnimationSet łączy animacje ze wspólnym startOffset, duration, interpolator
  • Niezgodność kliknięcia — View po animacji pozostaje w oryginalnej pozycji dla zdarzeń dotyku
  • Property Animation — nowoczesny zamiennik przez ObjectAnimator, AnimatorSet, działający z rzeczywistymi właściwościami
  • fillAfter pozostawia View w stanie końcowym, ale nie zmienia LayoutParams
  • Migracja na Property Animation eliminuje niezgodność kliknięcia i poprawia wydajność o 15-20%

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również