View Animation — ce este, Tween Animation în Android

Autor: IT Sectr Publicat: 2026-03-01 Timp de citire: 8 min

View Animation — un sistem de animație învechit Android API 1+, care lucrează cu obiecte View prin Tween Animation (Alpha, Translate, Scale, Rotate). Google recomandă Property Animation (Animator) pentru toate proiectele noi. Articolul explică principiile, tipurile, configurarea XML și motivele renunțării.

Principalele

  • View Animation — animația View prin Tween Animation: Alpha, Translate, Scale, Rotate
  • Definiție XML — animațiile se descriu în res/anim/ cu , , ,
  • AnimationSet — combinația mai multor animații într-un set cu parametri comuni
  • Limitare — View Animation nu schimbă proprietățile, ci doar randarea: View rămâne în poziția originală
  • Property Animation — înlocuitorul modern (Animator), care lucrează cu proprietățile reale ale obiectelor

Ce este View Animation?

View Animation — subsistemul de animație Android care funcționează la nivel de View (API 1+). Utilizează patru tipuri de Tween Animation: AlphaAnimation (transparență), TranslateAnimation (deplasare), ScaleAnimation (scalare) și RotateAnimation (rotire). Fiecare animație este descrisă într-un fișier XML în folderul res/anim/ sau creată programatic în codul Kotlin.

Mecanismul View Animation nu modifică proprietățile reale ale View — redesenează View în noua poziție, scară sau transparență, dar apelul onTouchEvent() primește coordonatele locației originale. Aceasta este limitarea cheie, cunoscută ca nepotrivire de clic (click mismatch).

Conform Android Developer Documentation (2026), Google marchează View Animation ca API învechit începând cu Android 3.0 (API 11). Pentru proiecte noi se recomandă Property Animation — Animator, AnimatorSet și ObjectAnimator, care lucrează cu proprietățile reale ale obiectelor prin metode setter.

Tipuri de Tween Animation

Tween Animation — animația „între“ cadrele cheie: stabiliți starea inițială și finală, iar sistemul calculează cadrele intermediare. Android oferă patru tipuri standard, fiecare cu propriul set de parametri.

AlphaAnimation

AlphaAnimation modifică transparența View de la fromAlpha la toAlpha. Valorile de la 0.0 (complet transparent) la 1.0 (complet vizibil). În mod implicit, animația durează 300 ms. Parametrul fillAfter=true menține View în starea finală de transparență.

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 deplasează View din poziția inițială (fromXDelta, fromYDelta) în poziția finală (toXDelta, toYDelta). Valorile se exprimă în pixeli, procente din părinte sau procente din View însuși. De exemplu, 100% înseamnă 100% din lățimea View.

ScaleAnimation

ScaleAnimation scalează View relativ la punctul pivotX/pivotY. fromXScale=1.0, toXScale=2.0 dublează lățimea. Parametrul pivotType determină relativ la ce se calculează pivotul: self, parent sau absolute. Animația de scalare nu modifică dimensiunile reale ale View — doar randarea.

RotateAnimation

RotateAnimation rotește View în jurul punctului pivot cu un unghi de la fromDegrees la toDegrees. Unghiul se măsoară în grade: 0 — poziția inițială, 360 — rotație completă. Pentru rotație infinită utilizați repeatCount=INFINITE.

View Animation vs Property Animation

Diferența dintre View Animation și Property Animation (Animator) — o diferență fundamentală în arhitectura animației Android. View Animation operează doar pe randare, Property Animation modifică proprietățile reale ale obiectului prin metode setter, ceea ce duce la actualizarea layout-ului.

CriteriuView AnimationProperty Animation
Nivel APIAPI 1+ (învechit)API 11+ (recomandat)
Ce animeazăRandarea View (canvas)Proprietățile obiectului (setter)
Clic după animațieÎn poziția originalăÎn noua poziție
Tipuri de animații4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsNu modificăModifică prin setLayoutParams
PerformanțăRidicată (doar canvas)Medie (depinde de setter)

Configurarea XML a animațiilor

View Animation se definește de obicei în fișierele XML res/anim/ cu elementul rădăcină (AnimationSet) sau unul dintre cele patru tipuri. AnimationSet permite combinarea animațiilor cu parametrii comuni 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>

Fișierul XML se încarcă prin AnimationUtils.loadAnimation(). Interpolatorul determină legea de modificare a parametrului în timp: accelerate, decelerate, bounce, overshoot. Un Interpolator personalizat se creează prin resursa XML @anim/interpolator_name.

Atribute comune

Toate animațiile Tween suportă atributele: duration (ms), startOffset (întârziere înainte de start), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Atributul fillAfter determină dacă View rămâne în starea finală a animației după finalizare.

Exemple de cod în Kotlin

Deși animațiile sunt de obicei definite în XML, ele pot fi create și programatic prin Kotlin. Abordarea programatică este utilă pentru parametrii dinamici: valoarea transparenței depinde de starea aplicației, nu este stabilită static.

kotlin
// Crearea programatică a AlphaAnimation în 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)
}

// Încărcarea animației din XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)

// AnimationSet — combinația animațiilor
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() adaugă animația în coada de randare a View. Pentru anulare se utilizează clearAnimation(). Important: fillAfter=true nu modifică LayoutParams — la reapelarea startAnimation, animația începe din starea inițială a View, nu din ultima stare randată.

Când să utilizați View Animation?

View Animation are un domeniu îngust de aplicare în 2026: suport pentru Android 4.x (API 16-19), unde Property Animation poate funcționa instabil; efecte simple de apariție/dispare care nu necesită schimbarea LayoutParams; animații în care nepotrivirea de clic nu este critică (de exemplu, elemente de fundal). Pentru toate celelalte cazuri, Google recomandă trecerea la ObjectAnimator sau AnimatorSet.

Conform Android Developers, Property Animation este cu 15-20% mai eficientă în utilizarea memoriei, deoarece nu creează cadre canvas intermediare. Trecerea de la View Animation la Property Animation elimină și problema nepotrivirii de clic: View după animație primește atingeri în noua poziție.

Întrebări frecvente

Cu ce diferă View Animation de Property Animation?

View Animation modifică doar randarea View — după animație, View rămâne în poziția originală pentru evenimente de atingere. Property Animation modifică proprietățile reale ale obiectului, ceea ce actualizează LayoutParams și procesează corect clicurile în noua poziție.

De ce View Animation este considerată învechită?

Google a declarat View Animation învechită începând cu Android 3.0 (API 11). Motivul — nepotrivirea de clic (click mismatch) și imposibilitatea de a anima proprietăți arbitrare ale obiectelor. Property Animation rezolvă aceste probleme și este recomandată pentru toate proiectele noi.

Se poate utiliza View Animation pentru animația butoanelor?

Se poate utiliza, dar nu este recomandat. Butonul după TranslateAnimation va fi afișat în locul nou, dar clicurile vor funcționa în poziția originală. Pentru butoane, utilizați Property Animation sau componenta cu AnimatedVisibility în Jetpack Compose.

Cum se anulează View Animation programatic?

Apelați view.clearAnimation(). Dacă animația a fost pornită cu fillAfter=true, View va rămâne în starea finală. Pentru revenirea forțată la starea inițială, apelați clearAnimation() și invalidate().

Rezumat

  • View Animation — sistem învechit de animație Tween Android cu patru tipuri: Alpha, Translate, Scale, Rotate
  • Definiție XML în res/anim/ cu elementele , , , și rădăcina
  • AnimationSet combină animațiile cu startOffset, duration, interpolator comune
  • Nepotrivire de clic — View după animație rămâne în poziția originală pentru evenimente de atingere
  • Property Animation — înlocuitor modern prin ObjectAnimator, AnimatorSet, care lucrează cu proprietăți reale
  • fillAfter menține View în starea finală, dar nu modifică LayoutParams
  • Migrarea la Property Animation elimină nepotrivirea de clic și îmbunătățește performanța cu 15-20%

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și