Animazione nello sviluppo mobile: cos'è, quali tipi esistono e come usarli

Autore: IT Sectr Pubblicato: 2026-02-26 Tempo di lettura: 10 min

L'animazione nelle app mobili le rende vive e reattive, guidando l'attenzione dell'utente e migliorando la percezione dell'interfaccia. In questo articolo analizzeremo i principali tipi di animazioni in iOS e Android: Property Animation, View Animation, UIKit Dynamics, Core Animation, Lottie, Rive, Spring Animation, Hero Animation e Shared Element Transition. Il materiale aiuterà gli sviluppatori principianti a capire quali strumenti e librerie scegliere per un compito specifico. Per maggiori dettagli — nella documentazione ufficiale di Android Animations.

Punti chiave

  • Property Animation (Android) modifica le proprietà reali dell'oggetto, View Animation — solo la rappresentazione visiva
  • Core Animation e UIView.animate (iOS) forniscono capacità integrate per animare livelli e viste
  • Lottie e Rive consentono di incorporare animazioni vettoriali complesse da After Effects e Rive Editor
  • Hero Animation (Shared Element Transition) crea transizioni fluide tra schermate
  • Spring Animation con la fisica della molla e Easing (Interpolator) rendono l'animazione naturale

Animazione in Android: Property Animation e View Animation

Android fornisce due sistemi di animazione principali: View Animation (legacy) e Property Animation (moderno). View Animation (o Tween Animation) funziona solo con la rappresentazione visiva — modifica la visualizzazione della View ma non le sue proprietà reali (ad esempio, le coordinate del clic rimangono al loro posto). Property Animation, introdotta in Android 3.0, modifica le proprietà reali dell'oggetto tramite Animator — ValueAnimator, ObjectAnimator o AnimatorSet.

ObjectAnimator e ValueAnimator

ObjectAnimator è la classe più popolare di Property Animation. Anima una proprietà specifica dell'oggetto (ad esempio, translationX, alpha, scaleY) per un tempo determinato con un dato Interpolator.

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

ValueAnimator non è legato a un oggetto specifico — genera valori che possono essere utilizzati per qualsiasi proprietà o logica personalizzata.

View Animation e animazioni XML

View Animation viene descritta in file XML res/anim/. Sono supportati quattro tipi: scale, translate, rotate, alpha. Lo svantaggio è che l'animazione non modifica i parametri reali della View. Per effetti semplici (lampeggio, rotazione) View Animation è ancora applicabile, ma per i nuovi progetti si raccomanda Property Animation.

Animazione in Jetpack Compose

Jetpack Compose offre un'API di animazione moderna: animateAsState, Animatable, AnimatedVisibility e AnimatedContent. L'animazione in Compose è reattiva: quando lo stato cambia, l'animazione si avvia automaticamente.

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

Animazione in iOS: Core Animation e UIView.animate

iOS fornisce un potente stack di animazione basato su Core Animation — un framework di basso livello che lavora con CALayer. UIKit si basa su Core Animation con i comodi metodi UIView.animate e UIViewPropertyAnimator.

UIView.animate

UIView.animate è il modo più semplice per animare in iOS. Permette di animare frame, alpha, transform, backgroundColor e altre proprietà di 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 per l'animazione fisica: gravità, collisioni, molle, forze di attrazione. Permette di creare comportamenti realistici degli oggetti senza calcolo manuale della fisica. Utilizzato per transizioni personalizzate, menu animati ed elementi di gioco.

CAAnimation e Core Animation

Core Animation (CAAnimation, CABasicAnimation, CAKeyframeAnimation) — un'API di basso livello per l'animazione di CALayer. Supporta trasformazioni 3D, animazione di percorso (keyframe), mascheratura e composizione. SwiftUI utilizza Core Animation internamente attraverso i modificatori animation e 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")

Per la maggior parte dei progetti iOS si utilizza SwiftUI con la sua animazione integrata. Ad esempio, withAnimation racchiude i cambiamenti di stato in un contesto animato.

Animazione vettoriale: Lottie e Rive

Le animazioni complesse (personaggi, transizioni, caricatori) sono difficili da implementare con il codice. Lottie e Rive risolvono questo problema consentendo ai designer di creare animazioni in editor visivi e agli sviluppatori di integrarle nell'app come componente pronto.

Lottie

Lottie — una libreria di Airbnb (ora LottieFiles) che renderizza animazioni da Adobe After Effects esportate in formato JSON. Supportata su Android, iOS, Flutter, React Native e Web. Le animazioni Lottie sono vettoriali, si ridimensionano senza perdita di qualità e possono essere personalizzate a livello di codice (velocità, progresso, colori).

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

Rive

Rive (precedentemente 2Dimensions) — uno strumento più avanzato per l'animazione vettoriale. A differenza di Lottie, Rive supporta l'animazione interattiva: stati, trigger, transizioni. L'animazione viene creata in Rive Editor e controllata nell'app tramite State Machine. Rive è adatto per interfacce di gioco, icone animate e transizioni complesse con feedback.

In IT Sectr usiamo Lottie per animazioni decorative (caricatori, operazioni riuscite, stati vuoti) e Rive per elementi interattivi delle schermate di onboarding. Questo riduce il tempo di sviluppo delle animazioni del 60% rispetto all'implementazione manuale con UIKit o Canvas.

Shared Element Transition e Hero Animation

Shared Element Transition — un'animazione in cui un elemento (immagine, testo, scheda) si muove e si trasforma dolcemente durante la transizione tra schermate. Questo crea l'illusione di continuità: l'utente non "va" verso una nuova schermata, ma "si immerge" nell'elemento.

Android Shared Element Transition

In Android la transizione viene implementata tramite ActivityOptionsCompat e attributi transitionName. FragmentTransaction supporta addSharedElement per le transizioni all'interno di un'Activity. Compose utilizza SharedTransitionLayout con SharedContentState.

iOS Hero Transition

iOS non ha una Hero Transition integrata, ma la libreria Hero (di Luke Zhao) implementa questo modello su UIKit. Basta assegnare un ID agli elementi su entrambe le schermate — Hero creerà automaticamente una transizione fluida. In SwiftUI, l'animazione di transizione è integrata tramite NavigationStack e matchedGeometryEffect.

Flutter Hero

Flutter ha un widget Hero integrato con un parametro tag. Quando due pagine contengono Hero con lo stesso tag, Flutter anima automaticamente la transizione tra di esse. Questo è uno dei modi più semplici per implementare animazioni complesse in un'applicazione mobile.

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

Spring Animation, Interpolator e Easing

Per far sì che un'animazione appaia naturale, si utilizzano curve di velocità — Interpolator in Android e Easing in iOS. Determinano come la velocità dell'animazione cambia dall'inizio alla fine.

Interpolator di Android

Android supporta diversi Interpolator integrati: LinearInterpolator (uniforme), AccelerateDecelerateInterpolator (lento-veloce-lento), FastOutSlowInInterpolator (Material Design), OvershootInterpolator (con superamento) e BounceInterpolator (con rimbalzo). Un Interpolator personalizzato può essere creato tramite XML o la classe TimeInterpolator.

Interpolator Comportamento Utilizzo
LinearInterpolatorVelocità costanteIndicatori di caricamento, rotazioni infinite
FastOutSlowInInterpolatorInizio rapido, fine morbidaMaterial Design, comparsa di schede
OvershootInterpolatorSupera il bersaglio e ritornaElementi di accento, pulsanti
BounceInterpolatorRimbalzo alla fineElenchi, pull-to-refresh

Spring Animation

Spring Animation (animazione a molla) modella la fisica della molla con i parametri di smorzamento (damping) e rigidità (stiffness). Smorzamento 0 — oscillazioni infinite, 1 — senza oscillazioni. La rigidità determina la velocità di ritorno. Spring Animation è disponibile in iOS (UIViewPropertyAnimator con UISpringTimingParameters), Android (SpringAnimation da physics2) e SwiftUI (spring()).

La documentazione Spring Animation in Android contiene esempi dettagliati di configurazione.

Animazione temporale

Timeline (linea temporale) — un approccio in cui l'animazione viene suddivisa in fotogrammi nel tempo. Utilizzata per sequenze complesse dove AnimationSet o l'animazione di gruppo non sono abbastanza flessibili. Android supporta AnimatorSet, iOS — CAAnimationGroup, Flutter — Interval in AnimationController.

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

In cosa differisce Property Animation da View Animation?

View Animation (Android) modifica solo la visualizzazione di una View senza cambiare le proprietà reali (la posizione del clic non cambia). Property Animation modifica le proprietà reali dell'oggetto, fornendo un comportamento più flessibile e prevedibile. Per i nuovi progetti utilizzare sempre Property Animation.

Cos'è Hero Animation?

Hero Animation è un'animazione in cui un elemento si muove e si trasforma dolcemente durante la transizione tra schermate, creando l'illusione di continuità. Implementata tramite Hero (Flutter), SharedElementTransition (Android) o matchedGeometryEffect (SwiftUI).

A cosa servono Lottie e Rive?

Lottie e Rive sono librerie per il rendering di animazioni vettoriali in runtime. Il designer crea l'animazione in After Effects (Lottie) o Rive Editor, la esporta in JSON, e lo sviluppatore la incorpora senza scrivere codice di animazione manualmente.

Cos'è Spring Animation e perché è utile?

Spring Animation modella la fisica della molla: l'animazione ha uno smorzamento naturale e un "rimbalzo". SwiftUI e Jetpack Compose supportano le animazioni spring nativamente, rendendo l'interfaccia più viva e reattiva.

Come scegliere l'Interpolator giusto?

La scelta dipende dal contesto: FastOutSlowIn — per la comparsa di elementi, Overshoot — per accenti, Linear — per indicatori di caricamento, Bounce — per elenchi. Material Design raccomanda curve standard: standard easing, deceleration easing e acceleration easing.

Riepilogo

  • Property Animation (Android ObjectAnimator) — standard moderno che sostituisce View Animation
  • iOS utilizza UIView.animate e Core Animation per il controllo dell'animazione a livello di layer
  • Lottie e Rive semplificano l'integrazione di animazioni vettoriali complesse dagli strumenti di progettazione
  • Hero Animation (Shared Element Transition) migliora la percezione della navigazione tra schermate
  • Spring Animation e la scelta corretta di Interpolator / Easing rendono l'animazione naturale
  • Flutter fornisce un widget Hero integrato per le transizioni e AnimationController per l'animazione personalizzata
  • Jetpack Compose e SwiftUI hanno un'animazione reattiva integrata tramite animateAsState e withAnimation

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto