Lottie — bu nədir, mobil tətbiqlərdə vektor animasiyası

Müəllif: IT Sectr Dərc olunub: 2026-03-01 Oxuma vaxtı: 10 dəq

Lottie — Adobe After Effects-dən Bodymovin plagini vasitəsilə JSON formatına ixrac edilmiş vektor animasiyasını oynadan, Airbnb-nin açıq mənbə kitabxanasıdır. Animasiyalar proqram təminatı ilə render edilir, istənilən ekran təsvir ölçüsündə keyfiyyət itkisi olmadan. GitHub (2026) məlumatına görə, Lottie iOS, Android və Web-də 50 000-dən çox layihədə istifadə olunur. Digər animasiya növləri haqqında ətraflı animasiya üzrə ümumi bələdçidə oxuyun.

Əsas məqamlar

  • Lottie — After Effects-dən JSON vektor animasiyası üçün Airbnb kitabxanası.
  • Bodymovin — After Effects-dən JSON-a animasiya ixracı üçün plagin.
  • LottieAnimationView — Android (Kotlin/Java) üçün əsas View komponenti.
  • AnimationView — iOS (Swift, UIKit/SwiftUI) üçün əsas UI komponenti.
  • .lottie formatı — ölçüsü 80%-ə qədər azaldan sıxılmış ikili konteyner.

Lottie nədir?

Lottie — 2015-ci ildə Airbnb-də hazırlanmış, vektor animasiyasını oynatmaq üçün çarpaz platforma kitabxanasıdır. Ağır video faylları və rastr sprite cədvəlləri problemini həll edir: dizayner After Effects-də animasiya yaradır, Bodymovin vasitəsilə JSON-a ixrac edir və tərtibatçı bu faylı mobil tətbiqə yerləşdirir. Lottie animasiyanı platformadan asılı olaraq Canvas, Core Animation və ya Skia vasitəsilə proqramlı şəkildə render edir.

Lottie-nin əsas üstünlüyü — vektor animasiyası Apple Watch saatlarından 4K televizorlara qədər istənilən ekranda keyfiyyət itkisi olmadan miqyaslanır. JSON animasiya faylının ölçüsü adətən 5–50 KB təşkil edir ki, bu da ekvivalent video fayldan dəfələrlə kiçikdir. Airbnb Engineering (2025) məlumatına görə, Lottie Adobe After Effects imkanlarının 80%-dən çoxunu, o cümlədən maskalar, effektlər, əyrilər və ifadələri dəstəkləyir.

Bodymovin — After Effects üçün (pulsuz, GitHub) Lottie iş vaxtı üçün başa düşülən JSON formatında kompozisiyanı seriallaşdıran plagin. After Effects CC 2018 və daha yeni versiyaları dəstəklənir. Çox sayda əsas kadrları olan mürəkkəb animasiyalar üçün Lottie JSON-a əsaslanan, lakin sıxılmış və bir fayla paketlənmiş dotLottie formatından istifadə etmək tövsiyə olunur.

Lottie arxitekturası: render necə işləyir

Lottie platformanın imkanlarına uyğunlaşan laylı render arxitekturasından istifadə edir. Android-də animasiya Canvas API vasitəsilə çəkilir — Lottie-nin öz rendereri (LottieDrawable) sistem animasiyalarından istifadə etmir. iOS-də Lottie Core Animation Layers-ə əsaslanır, bu da yüksək performans və 60 FPS təmin edir. Flutter-də Lottie CustomPainter vasitəsilə Skia Canvas-dan istifadə edir.

Render üç mərhələdən keçir: JSON pars etmə — animasiyanın LottieComposition-da təhlili (bütün laylar, formalar, əsas kadrlar); interpolyasiya — easing əyriləri nəzərə alınmaqla əsas kadrlar arasında aralıq dəyərlərin hesablanması; çəkmə — cari kadrın Canvas və ya Core Animation vasitəsilə render edilməsi. Lottie aparat sürətləndirilməsini dəstəkləyir: Android-də — Hardware Accelerator ilə Canvas vasitəsilə sürətləndirmə, iOS-də — quraşdırılmış GPU sürətləndirməsi ilə CALayer Core Animation.

PlatformaRendererAparat sürətləndirilməsiKitabxana
AndroidCanvas (LottieDrawable)Hardware Accelerator (API 14+)com.airbnb.lottie
iOSCore Animation (CALayer)GPU (Metal, OpenGL)Lottie-iOS
FlutterSkia Canvas (CustomPainter)Impeller (Flutter 3.16+)lottie_flutter
React NativeNative bridgePlatformadan asılıdırlottie-react-native

Android-də Lottie istifadəsi (Kotlin)

Android-də LottieAnimationView AppCompatImageView-i genişləndirir və yükləmə və renderin bütün dövrünü öz üzərinə götürür. JSON faylı res/raw və ya assets qovluğuna yerləşdirilir. LottieAnimationView oynatma idarəetməsini — play, pause, resume, setFrame, setProgress, repeat, speed — və AnimatorUpdateListener və AnimatorListener vasitəsilə dinləməni dəstəkləyir.

xml

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/animationView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:lottie_rawRes="@raw/loading_animation"
    app:lottie_autoPlay="true"
    app:lottie_loop="true" />
kotlin
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieListener

// LottieAnimationView-in proqram təyin edilməsi
val lottieView = LottieAnimationView(context).apply {
    setAnimation(R.raw.celebrate_animation)
    repeatCount = ValueAnimator.INFINITE
    speed = 1.5f
    addAnimatorUpdateListener { animator ->
        val progress = animator.animatedValue as Float
        progressBar.progress = (progress * 100).toInt()
    }
    playAnimation()
}

// Assets-dən yükləmə və keşləmə
lottieView.setAnimation("animations/confetti.json")
lottieView.setCacheStrategy(LottieAnimationView.CacheStrategy.Strong)

// LottieDrawable — View olmadan fərdi çəkmə
val drawable = LottieDrawable().apply {
    setComposition(
        LottieCompositionFactory.fromRawRes(context, R.raw.star)
            .addListener { composition -> composition?.let { setComposition(it); play() } }
    )
}

Android üçün ən yaxşı təcrübələr: tez-tez təkrarlanan animasiyalar üçün setCacheStrategy(CacheStrategy.Strong) istifadə edin — kompozisiya yaddaşda keşlənir və hər yeni nümunə JSON-u yenidən pars etmir. Siyahılar (RecyclerView) üçün LottieAnimationView-dən enableMergePathsForKitKatAndAbove(true) və disableExtraScaleModeForOlderWorkarounds() ilə render optimallaşdırması üçün istifadə edin. Şəffaf fonlu animasiyalar üçün GPU sürətləndirilməsi üçün android:layerType="hardware" təyin edin.

iOS-də Lottie istifadəsi (Swift)

iOS-də AnimationView — UIKit və SwiftUI üçün Lottie-nin əsas sinfidir. Swift Package Manager və ya CocoaPods vasitəsilə qoşulur. JSON faylları layihənin bundle-ına əlavə edilir. AnimationView avtomatik olaraq scale (ekranın məntiqi sıxlığı) təyin edir və 60 FPS ilə layların render edilməsi üçün Core Animation-dan istifadə edir.

swift
import Lottie

// UIKit: Əllə idarə olunan AnimationView
let animationView = AnimationView(name: "confetti")
animationView.frame = view.bounds
animationView.contentMode = .scaleAspectFit
animationView.loopMode = .loop
animationView.animationSpeed = 1.5
animationView.play(fromProgress: 0, toProgress: 0.5) { finished in
    print("Animasiya seqmenti bitdi: \(finished)")
}
view.addSubview(animationView)

// UIKit: gedişatla animasiya (hadisəyə bağlamaq üçün)
animationView.play(fromFrame: AnimationFrameTime(30),
                    toFrame: AnimationFrameTime(90))
swift
// SwiftUI: UIViewRepresentable kimi LottieView
import Lottie
import SwiftUI

struct LottieView: UIViewRepresentable {
    let name: String
    var loopMode: LottieLoopMode = .loop
    @Binding var progress: CGFloat

    func makeUIView(context: Context) -> AnimationView {
        let view = AnimationView(name: name)
        view.contentMode = .scaleAspectFit
        view.loopMode = loopMode
        return view
    }

    func updateUIView(_ uiView: AnimationView, context: Context) {
        uiView.currentProgress = progress
    }
}

// SwiftUI-də istifadə
LottieView(name: "loading", progress: $animationProgress)
    .frame(width: 100, height: 100)

iOS üçün ən yaxşı təcrübələr: yüklənmədən dərhal sonra işə düşən animasiyalar üçün birdəfəlik vurğu effektləri üçün animationView.play(fromProgress: 0, toProgress: 1) loopMode = .playOnce ilə istifadə edin. UITableView/UICollectionView-də Lottie üçün LottieAnimation.cached vasitəsilə keşlənmiş animasiya faylı ilə AnimationView istifadə edin. Çox sayda layın (50+) render edilməsi FPS-in düşməsinə səbəb ola bilər — belə hallarda renderingEngine = .mainThread (standart) və ya macOS üçün .coreAnimation daxil edin.

Lottie vs video: animasiya formatlarının müqayisəsi

Lottie video fayllarından prinsipial olaraq fərqlənir: o piksel saxlamır, vektor fiqurlarını, onların transformasiyalarını və zamanla dəyişmə əyrilərini təsvir edir. Video (MP4, WebM) — sabit təsvir ölçülü rastr kadrlar ardıcıllığıdır. Fərq fayl ölçüsü, miqyaslama keyfiyyəti, interaktivlik və performansda özünü göstərir.

ParametrLottie (JSON)Video (MP4)GIF
Fayl ölçüsü5–50 KB200–2000 KB500–5000 KB
Miqyaslama keyfiyyətiVektor (sonsuz)Sabit (piksel)Sabit
İnteraktivlikGedişat, sürət, pauza, rəng dəyişməsiYoxYox
Alfa kanal (şəffaflıq)YerliKodek tələb edirDəstəklənir
Performans (CPU)Aşağı yükOrta (dekodlaşdırma)Yüksək (rastr dekodlaşdırma)

Nə vaxt Lottie seçmək: yükləmə ikonları, bəyənmə/reaksiya animasiyaları, onboard ekranı, düymələrin vurğu mikroanimasiyaları. 3D effektləri, realist işıqlandırma və ya fotorealist personajları olan mürəkkəb səhnələr üçün video daha praktik seçim olaraq qalır. Lottie uzun səhnələrin (10 saniyədən çox) oynadılması üçün nəzərdə tutulmayıb — bir animasiyanın optimal müddəti 2–5 saniyədir.

Lottie performansının optimallaşdırılması

Lottie performansı layların sayından, maskaların və effektlərin mürəkkəbliyindən və rendererdən asılıdır. Orta seqment cihazlarında 60 FPS saxlamaq üçün tövsiyələrə əməl edin: layların sayını səhnə başına 30–40 ilə məhdudlaşdırın, üst-üstə düşən iç-içə pre-kompozisiyalardan qaçın, mürəkkəb animasiyalar üçün dotLottie istifadə edin.

kotlin
// RecyclerView üçün Lottie optimallaşdırılması
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieDrawable
import com.airbnb.lottie.LottieCompositionFactory

// Kompozisiyanın yaddaşda keşlənməsi
private val cache = LottieCompositionFactory.setCacheStrategy(CacheStrategy.Strong)

// Təkrar istifadə üçün LottieAnimationView hovuzu
class LottiePool {
    private val pool = LinkedList<LottieAnimationView>()

    fun acquire(context: Context): LottieAnimationView {
        return pool.poll() ?: LottieAnimationView(context)
    }

    fun release(view: LottieAnimationView) {
        view.pauseAnimation()
        view.cancelAnimation()
        pool.add(view)
    }
}

// Lazımsız imkanların söndürülməsi
lottieView.enableMergePathsForKitKatAndAbove(true)
lottieView.setHardwareAcceleration(true)
lottieView.setMaxFrame(60) // Kadrların sayının məhdudlaşdırılması

Əlavə optimallaşdırmalar: Android 4.4+ olan cihazlar üçün enableMergePathsForKitKatAndAbove(true) daxil edin — bu üst-üstə düşən konturları bir yola birləşdirərək draw calls sayını azaldır. JSON əvəzinə dotLottie istifadə edin — ikili format protobuf-serializasiya hesabına animasiyanı 50–80% sıxır, bu da pars etmə vaxtını qısaldır. RecyclerView-də animasiyalar üçün repeatCount = 0 (birdəfəlik oynatma) təyin edin və recyclerView.addOnScrollListener vasitəsilə sürüşdürmə zamanı animasiyanı dayandırın. Airbnb Engineering Blog (2025) məlumatına görə, bu tədbirlər CPU yükünü 40%-ə qədər azaldır.

Tez-tez verilən suallar

Lottie JSON ölçüsünü necə azaltmaq olar?

dotLottie — JSON-u 50–80% sıxan protobuf əsaslı ikili formatdan istifadə edin. After Effects-də Bodymovin vasitəsilə «Glyphs» = None parametri ilə ixrac edin (mətn lazım deyilsə), əlavə bələdçiləri və bələdçi laylarını söndürün. İxracdan əvvəl görünməyən layları və 0% opacity olan layları silin.

Lottie köhnə cihazlarda oynatılmır — nə etməli?

Minimal SDK versiyasını yoxlayın: Android üçün Lottie API 14+ dəstəkləyir, lakin bəzi effektlər (Path Morphing, Gradient) yalnız API 21+ ilə işləyir. iOS-də Lottie iOS 11+ tələb edir. Köhnə cihazlar üçün fallback istifadə edin — animasiyadan statik png kadrı. Animasiyaları LottieCompositionFactory vasitəsilə asinxron yükləyin, LottieListener.onFailure ilə xəta idarəetməsi ilə.

Lottie animasiyasında rəngləri dinamik dəyişmək olar?

Bəli, LottieDynamicProperties və ya KeyPath vasitəsilə. After Effects-də Layer Name təyin edin (məsələn, «icon-fill»), sonra kodda: lottieView.addValueCallback(KeyPath(«icon-fill»), LottieProperty.COLOR) { Color.GREEN }. Bu, fayl dublikatları yaratmadan animasiyanı tətbiq mövzusuna uyğunlaşdırmağa imkan verir. iOS üçün AnimationView.setValueProvider(ColorValueProvider) istifadə edin.

Lottie vs Rive — fərq nədir?

Lottie — After Effects-dən əvvəlcədən yaradılmış animasiyanı oynatmaq üçün format. Rive — State Machine, triggerlər və girişlərlə interaktiv animasiya. Lottie passiv animasiyalar (yükləmə, bəyənmələr, qarşılama ekranları) üçün uyğundur. Rive — oyunlar, interaktiv UI elementləri, istifadəçi hərəkətlərinə əks əlaqə ilə animasiyalar üçün. Rive öz redaktorunu tələb edir, Lottie tanış After Effects vasitəsilə işləyir.

Lottie animasiyasının bitməsini necə izləmək olar?

Android-də: lottieView.addAnimatorListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator?) { ... } }). iOS-də: animationView.play { finished in }. SwiftUI-də: onChange ilə currentProgress üçün Binding istifadə edin. Kotlin Multiplatform üçün lottie-compose kitabxanasından LottieAnimatable istifadə edin.

Nəticə

  • Lottie — After Effects-dən JSON vektor animasiyasını oynatmaq üçün Airbnb kitabxanası.
  • Bodymovin — After Effects → JSON ixrac plagini, pulsuz, açıq mənbə.
  • LottieAnimationView (Android) və AnimationView (iOS) — yerləşdirmə üçün əsas komponentlər.
  • dotLottie (.lottie) formatı protobuf sıxılması hesabına fayl ölçüsünü 80%-ə qədər azaldır.
  • Lottie 60 FPS ilə Canvas (Android), Core Animation (iOS) və ya Skia (Flutter) vasitəsilə render edir.
  • Lottie animasiyasının optimal müddəti — 2–5 saniyə, səhnə başına 30–40 laydan çox olmamalıdır.
  • Əks əlaqə ilə interaktiv animasiyalar üçün Lottie yox, Rive istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun