Animația în dezvoltarea mobilă: ce este, ce tipuri există și cum se utilizează

Autor: IT Sectr Publicat: 2026-02-26 Timp de citire: 10 min

Animația în aplicațiile mobile le face vii și receptive, ghidând atenția utilizatorului și îmbunătățind percepția interfeței. În acest articol vom acoperi principalele tipuri de animații în iOS și Android: Property Animation, View Animation, UIKit Dynamics, Core Animation, Lottie, Rive, Spring Animation, Hero Animation și Shared Element Transition. Materialul va ajuta dezvoltatorii începători să înțeleagă ce instrumente și biblioteci să aleagă pentru o sarcină specifică. Mai multe detalii — în documentația oficială Android Animations.

Puncte cheie

  • Property Animation (Android) modifică proprietățile reale ale obiectului, View Animation — doar reprezentarea vizuală
  • Core Animation și UIView.animate (iOS) oferă capacități încorporate pentru animarea straturilor și vizualizărilor
  • Lottie și Rive permit încorporarea animațiilor vectoriale complexe din After Effects și Rive Editor
  • Hero Animation (Shared Element Transition) creează tranziții fluide între ecrane
  • Spring Animation cu fizica arcului și Easing (Interpolator) fac animația naturală

Animația în Android: Property Animation și View Animation

Android oferă două sisteme principale de animație: View Animation (moștenit) și Property Animation (modern). View Animation (sau Tween Animation) funcționează doar cu reprezentarea vizuală — modifică afișarea Vizualizării dar nu și proprietățile sale reale (de exemplu, coordonatele de clic rămân în același loc). Property Animation, introdusă în Android 3.0, modifică proprietățile reale ale obiectului prin Animator — ValueAnimator, ObjectAnimator sau AnimatorSet.

ObjectAnimator și ValueAnimator

ObjectAnimator este cea mai populară clasă Property Animation. Animează o proprietate specifică a obiectului (de exemplu, translationX, alpha, scaleY) pentru un timp specificat cu un Interpolator dat.

kotlin
ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f).apply {
    duration = 500
    interpolator = FastOutSlowInInterpolator()
    startDelay = 200
}.start()

ValueAnimator nu este legat de un obiect specific — generează valori care pot fi utilizate pentru orice proprietate sau logică personalizată.

View Animation și animații XML

View Animation este descrisă în fișiere XML res/anim/. Patru tipuri sunt acceptate: scale, translate, rotate, alpha. Dezavantajul este că animația nu modifică parametrii reali ai Vizualizării. Pentru efecte simple (clipire, rotație) View Animation este încă aplicabilă, dar pentru proiecte noi se recomandă Property Animation.

Animația în Jetpack Compose

Jetpack Compose oferă o API de animație modernă: animateAsState, Animatable, AnimatedVisibility și AnimatedContent. Animația în Compose este reactivă: când starea se schimbă, animația pornește automat.

kotlin
var expanded = remember { mutableStateOf(false) }
val size = animateAsState(
    if (expanded) 200f else 50f
)
Box(
    modifier = Modifier
        .size(size.value, size.value)
        .clickable { expanded = !expanded }
        .background(Color.Blue)
)

Animația în iOS: Core Animation și UIView.animate

iOS oferă un stack de animație puternic bazat pe Core Animation — un framework de nivel scăzut care lucrează cu CALayer. UIKit se construiește deasupra Core Animation cu metodele convenabile UIView.animate și UIViewPropertyAnimator.

UIView.animate

UIView.animate este cel mai simplu mod de a anima în iOS. Permite animarea frame, alpha, transform, backgroundColor și a altor proprietăți UIView.

swift
UIView.animate(
    withDuration: 0.5,
    delay: 0.2,
    usingSpringWithDamping: 0.6,
    initialSpringVelocity: 1.0,
    options: [.curveEaseInOut]
) {
    myView.frame.origin.x += 300
    myView.alpha = 0.5
}

UIKit Dynamics

UIKit Dynamics — un framework pentru animație fizică: gravitație, coliziuni, arcuri, forțe de atracție. Permite crearea de comportamente realiste ale obiectelor fără calcul manual al fizicii. Utilizat pentru tranziții personalizate, meniuri animate și elemente de joc.

CAAnimation și Core Animation

Core Animation (CAAnimation, CABasicAnimation, CAKeyframeAnimation) — o API de nivel scăzut pentru animația CALayer. Suportă transformări 3D, animație de cale (keyframe), mascare și compoziție. SwiftUI utilizează Core Animation sub capotă prin modificatorii animation și withAnimation.

swift
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
animation.toValue = CGFloat.pi * 2
animation.duration = 1.0
animation.repeatCount = .infinity
myLayer.add(animation, forKey: "rotation")

Pentru majoritatea proiectelor iOS se utilizează SwiftUI cu animația sa încorporată. De exemplu, withAnimation învelește schimbările de stare într-un context animat.

Animație vectorială: Lottie și Rive

Animațiile complexe (personaje, tranziții, încărcătoare) sunt dificil de implementat cu cod. Lottie și Rive rezolvă această problemă permițând designerilor să creeze animații în editori vizuali și dezvoltatorilor să le încorporeze în aplicație ca o componentă gata făcută.

Lottie

Lottie — o bibliotecă de la Airbnb (acum LottieFiles) care redă animații din Adobe After Effects exportate în format JSON. Suportată pe Android, iOS, Flutter, React Native și Web. Animațiile Lottie sunt vectoriale, se scalează fără pierdere de calitate și pot fi personalizate programatic (viteză, progres, culori).

kotlin
// Android
import com.airbnb.lottie.LottieAnimationView
val lottieView = findViewById<LottieAnimationView>(R.id.lottieView)
lottieView.setAnimation(R.raw.loading_animation)
lottieView.playAnimation()

Rive

Rive (fost 2Dimensions) — un instrument mai avansat pentru animație vectorială. Spre deosebire de Lottie, Rive suportă animație interactivă: stări, declanșatoare, tranziții. Animația este creată în Rive Editor și controlată în aplicație printr-o State Machine. Rive este potrivit pentru interfețe de joc, pictograme animate și tranziții complexe cu feedback.

La IT Sectr folosim Lottie pentru animații decorative (încărcătoare, operațiuni reușite, stări goale) și Rive pentru elemente interactive ale ecranelor de onboarding. Aceasta reduce timpul de dezvoltare a animațiilor cu 60% comparativ cu implementarea manuală cu UIKit sau Canvas.

Shared Element Transition și Hero Animation

Shared Element Transition — o animație în care un element (imagine, text, card) se mișcă și se transformă lin la tranziția între ecrane. Aceasta creează iluzia de continuitate: utilizatorul nu "merge" la un ecran nou, ci "se scufundă" în element.

Android Shared Element Transition

În Android, tranziția este implementată prin ActivityOptionsCompat și atributele transitionName. FragmentTransaction suportă addSharedElement pentru tranziții în cadrul unei Activity. Compose utilizează SharedTransitionLayout cu SharedContentState.

iOS Hero Transition

iOS nu are o Hero Transition încorporată, dar biblioteca Hero (de Luke Zhao) implementează acest model pe UIKit. Atribuiți pur și simplu un id elementelor de pe ambele ecrane — Hero va crea automat o tranziție lină. În SwiftUI, animația de tranziție este încorporată prin NavigationStack și matchedGeometryEffect.

Flutter Hero

Flutter are un widget Hero încorporat cu un parametru tag. Când două pagini conțin Hero cu același tag, Flutter animează automat tranziția între ele. Aceasta este una dintre cele mai simple moduri de a implementa animația complexă într-o aplicație mobilă.

dart
Hero(
    tag: 'profile_avatar',
    child: CircleAvatar(
        backgroundImage: AssetImage('avatar.jpg'),
        radius: 50,
    ),
)

Spring Animation, Interpolator și Easing

Pentru ca o animație să pară naturală, se folosesc curbe de viteză — Interpolator în Android și Easing în iOS. Acestea determină cum se schimbă viteza animației de la început la sfârșit.

Interpolatori Android

Android suportă mai mulți Interpolatori încorporați: LinearInterpolator (uniform), AccelerateDecelerateInterpolator (încet-rapid-încet), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (cu depășire) și BounceInterpolator (cu săritură). Un Interpolator personalizat poate fi creat prin XML sau clasa TimeInterpolator.

Interpolator Comportament Utilizare
LinearInterpolatorViteză constantăIndicatori de încărcare, rotații infinite
FastOutSlowInInterpolatorStart rapid, final linMaterial Design, apariția cardurilor
OvershootInterpolatorDepășește ținta și revineElemente de accent, butoane
BounceInterpolatorSăritură la sfârșitListe, pull-to-refresh

Spring Animation

Spring Animation (animație cu arc) modelează fizica arcului cu parametrii de amortizare (damping) și rigiditate (stiffness). Amortizare 0 — oscilații infinite, 1 — fără oscilații. Rigiditatea determină viteza de revenire. Spring Animation este disponibilă în iOS (UIViewPropertyAnimator cu UISpringTimingParameters), Android (SpringAnimation din physics2) și SwiftUI (spring()).

Documentația Spring Animation în Android conține exemple detaliate de configurare.

Animație pe axa temporală

Timeline (axa temporală) — o abordare în care animația este împărțită în cadre în timp. Utilizată pentru secvențe complexe unde AnimationSet sau animația de grup nu sunt suficient de flexibile. Android suportă AnimatorSet, iOS — CAAnimationGroup, Flutter — Interval în AnimationController.

Часто задаваемые вопросы

Cu ce diferă Property Animation de View Animation?

View Animation (Android) modifică doar afișarea vizuală a unei Vizualizări fără a schimba proprietățile reale (poziția clicului nu se schimbă). Property Animation modifică proprietățile reale ale obiectului, oferind un comportament mai flexibil și previzibil. Pentru proiecte noi, utilizați întotdeauna Property Animation.

Ce este Hero Animation?

Hero Animation este o animație în care un element se mișcă și se transformă lin la tranziția între ecrane, creând iluzia de continuitate. Implementată prin Hero (Flutter), SharedElementTransition (Android) sau matchedGeometryEffect (SwiftUI).

De ce sunt necesare Lottie și Rive?

Lottie și Rive sunt biblioteci pentru redarea animațiilor vectoriale în runtime. Designerul creează animația în After Effects (Lottie) sau Rive Editor, o exportă în JSON, iar dezvoltatorul o încorporează fără a scrie cod de animație manual.

Ce este Spring Animation și de ce este utilă?

Spring Animation modelează fizica arcului: animația are amortizare naturală și "săritură". SwiftUI și Jetpack Compose suportă animațiile spring nativ, făcând interfața mai vie și mai receptivă.

Cum aleg Interpolatorul potrivit?

Alegerea depinde de context: FastOutSlowIn — pentru apariția elementelor, Overshoot — pentru accente, Linear — pentru indicatori de încărcare, Bounce — pentru liste. Material Design recomandă curbe standard: standard easing, deceleration easing și acceleration easing.

Rezumat

  • Property Animation (Android ObjectAnimator) — standard modern care înlocuiește View Animation
  • iOS utilizează UIView.animate și Core Animation pentru controlul animației la nivel de straturi
  • Lottie și Rive simplifică încorporarea animațiilor vectoriale complexe din instrumentele de design
  • Hero Animation (Shared Element Transition) îmbunătățește percepția navigării între ecrane
  • Spring Animation și alegerea corectă a Interpolator / Easing fac animația naturală
  • Flutter oferă un widget Hero încorporat pentru tranziții și AnimationController pentru animație personalizată
  • Jetpack Compose și SwiftUI au animație reactivă încorporată prin animateAsState și withAnimation

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