View Animation — egy elavult Android API 1+ animációs rendszer, amely View objektumokkal dolgozik Tween Animation (Alpha, Translate, Scale, Rotate) segítségével. A Google a Property Animation (Animator) ajánlja minden új projekthez. A cikk elmagyarázza az elveket, típusokat, XML konfigurációt és az elhagyás okait.
Főbb pontok
View Animation — az Android animációs alrendszere, amely View szinten működik (API 1+). Négy Tween Animation típust használ: AlphaAnimation (átlátszóság), TranslateAnimation (eltolás), ScaleAnimation (méretezés) és RotateAnimation (forgatás). Minden animáció egy XML fájlban van leírva a res/anim/ mappában, vagy programozottan jön létre Kotlin kódban.
A View Animation mechanizmus nem változtatja meg a View valós tulajdonságait — újrarajzolja a View-t új pozícióban, méretben vagy átlátszóságban, de az onTouchEvent() visszahívás az eredeti hely koordinátáit kapja. Ez a kulcsfontosságú korlátozás, amely kattintás-eltérésként (click mismatch) ismert.
Az Android Developer Documentation (2026) szerint a Google az Android 3.0 (API 11) verziótól kezdve elavultként jelöli a View Animation-t. Új projektekhez a Property Animation ajánlott — Animator, AnimatorSet és ObjectAnimator, amelyek setter metódusokon keresztül dolgoznak az objektumok valós tulajdonságaival.
Tween Animation — animáció „kulcskockák között“: megadja a kezdeti és végső állapotot, a rendszer pedig kiszámítja a köztes kockákat. Az Android négy szabványos típust kínál, mindegyik saját paraméterkészlettel.
AlphaAnimation megváltoztatja a View átlátszóságát fromAlpha-tól toAlpha-ig. Értékek 0.0 (teljesen átlátszó) és 1.0 (teljesen látható) között. Alapértelmezés szerint az animáció 300 ms-ig tart. A fillAfter=true paraméter a View-t a végső átlátszósági állapotban hagyja.
<!-- 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 eltolja a View-t a kezdeti pozícióból (fromXDelta, fromYDelta) a végső pozícióba (toXDelta, toYDelta). Az értékeket pixelben, a szülő százalékában vagy magának a View-nak a százalékában adják meg. Például 100% a View szélességének 100%-át jelenti.
ScaleAnimation méretezi a View-t a pivotX/pivotY ponthoz képest. fromXScale=1.0, toXScale=2.0 megkétszerezi a szélességet. A pivotType paraméter határozza meg, hogy mihez képest számítódik a pivot: self, parent vagy absolute. A méretezési animáció nem változtatja meg a View valós méreteit — csak a megjelenítést.
RotateAnimation elforgatja a View-t a pivot pont körül fromDegrees-től toDegrees-ig terjedő szöggel. A szög fokban van mérve: 0 — kiinduló helyzet, 360 — teljes forgatás. Végtelen forgatáshoz használja a repeatCount=INFINITE értéket.
A különbség a View Animation és a Property Animation (Animator) között — alapvető különbség az Android animációs architektúrájában. A View Animation csak a megjelenítésen működik, a Property Animation setter metódusokon keresztül megváltoztatja az objektum valós tulajdonságait, ami a layout frissítéséhez vezet.
| Szempont | View Animation | Property Animation |
|---|---|---|
| API szint | API 1+ (elavult) | API 11+ (ajánlott) |
| Mit animál | View megjelenítés (canvas) | Objektum tulajdonságai (setter) |
| Kattintás animáció után | Eredeti pozícióban | Új pozícióban |
| Animáció típusok | 4 Tween + AnimationSet | ObjectAnimator, ValueAnimator, AnimatorSet |
| LayoutParams | Nem változtat | setLayoutParams-on keresztül változtat |
| Teljesítmény | Magas (csak canvas) | Közepes (setter-től függ) |
View Animation általában a res/anim/ XML fájlokban van definiálva a
<!-- 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>Az XML fájl a AnimationUtils.loadAnimation() segítségével töltődik be. Az Interpolator meghatározza a paraméter időbeli változásának törvényét: accelerate, decelerate, bounce, overshoot. Egyéni Interpolator az @anim/interpolator_name XML erőforráson keresztül hozható létre.
Minden Tween animáció támogatja a következő attribútumokat: duration (ms), startOffset (késleltetés indulás előtt), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. A fillAfter attribútum határozza meg, hogy a View az animáció befejezése után a végső állapotban marad-e.
Bár az animációk általában XML-ben vannak definiálva, programozottan is létrehozhatók Kotlin segítségével. A programozott megközelítés hasznos dinamikus paraméterekhez: az átlátszóság értéke az alkalmazás állapotától függ, nem statikusan meghatározott.
// AlphaAnimation programozott létrehozása Kotlinban
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)
}
// Animáció betöltése XML-ből
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)
// AnimationSet — animációk kombinációja
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)A startAnimation() metódus hozzáadja az animációt a View megjelenítési sorához. A megszakításhoz a clearAnimation() használható. Fontos: a fillAfter=true nem változtatja meg a LayoutParams-t — a startAnimation újbóli meghívásakor az animáció a View kezdeti állapotából indul, nem az utoljára megjelenített állapotból.
View Animation 2026-ban szűk alkalmazási körrel rendelkezik: Android 4.x (API 16-19) támogatása, ahol a Property Animation instabilan működhet; egyszerű megjelenés/eltűnés effektusok, amelyek nem igénylik a LayoutParams módosítását; olyan animációk, ahol a kattintás-eltérés nem kritikus (például háttérelemek). Minden más esetben a Google az ObjectAnimator vagy AnimatorSet használatát ajánlja.
Az Android Developers szerint a Property Animation 15-20%-kal hatékonyabb memóriahasználat szempontjából, mert nem hoz létre köztes canvas kockákat. A View Animation-ről Property Animation-re való áttérés megszünteti a kattintás-eltérés problémáját is: a View animáció után az új pozícióban fogadja az érintéseket.
Gyakran Ismételt Kérdések
View Animation csak a View megjelenítését változtatja — animáció után a View az eredeti pozícióban marad az érintési események számára. Property Animation megváltoztatja az objektum valós tulajdonságait, ami frissíti a LayoutParams-t és helyesen dolgozza fel a kattintásokat az új pozícióban.
A Google az Android 3.0 (API 11) verziótól elavulttá nyilvánította a View Animation-t. Ok — kattintás-eltérés (click mismatch) és az objektumok tetszőleges tulajdonságainak animálásának képtelensége. A Property Animation megoldja ezeket a problémákat, és minden új projekthez ajánlott.
Használható, de nem ajánlott. A gomb a TranslateAnimation után az új helyen jelenik meg, de a kattintások az eredeti pozícióban működnek. Gombokhoz használja a Property Animation-t vagy az AnimatedVisibility komponenst a Jetpack Compose-ban.
Hívja meg a view.clearAnimation() metódust. Ha az animáció fillAfter=true paraméterrel indult, a View a végső állapotban marad. A kényszerített visszatéréshez a kezdeti állapotba hívja meg a clearAnimation() és invalidate() metódusokat.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is