Lottie — vad är det, vektoranimation i mobilappar

Författare: IT Sectr Publicerad: 2026-03-01 Lästid: 10 min

Lottie — ett bibliotek med öppen källkod från Airbnb som spelar upp vektoranimation exporterad från Adobe After Effects till JSON-format via plugin-programmet Bodymovin. Animationer renderas programmatiskt utan kvalitetsförlust på vilken skärmupplösning som helst. Enligt data från GitHub (2026) används Lottie i över 50 000 projekt på iOS, Android och Web. Läs mer om andra typer av animationer i den allmänna animationsguiden.

Huvudpunkter

  • Lottie — Airbnbs bibliotek för JSON-vektoranimation från After Effects.
  • Bodymovin — plugin för export av animation från After Effects till JSON.
  • LottieAnimationView — den huvudsakliga View-komponenten för Android (Kotlin/Java).
  • AnimationView — den huvudsakliga UI-komponenten för iOS (Swift, UIKit/SwiftUI).
  • Formatet .lottie — en komprimerad binär behållare som minskar storleken med upp till 80%.

Vad är Lottie?

Lottie — ett plattformsoberoende bibliotek för uppspelning av vektoranimation, utvecklat på Airbnb 2015. Det löser problemet med tunga videofiler och raster-sprite-ark: designern skapar en animation i After Effects, exporterar via Bodymovin till JSON, och utvecklaren bäddar in filen i mobilappen. Lottie renderar animationen programmatiskt via Canvas, Core Animation eller Skia, beroende på plattform.

Den största fördelen med Lottie — vektoranimation skalas utan kvalitetsförlust på alla skärmar: från Apple Watch-klockor till 4K-TV-apparater. Storleken på JSON-animationsfilen är vanligtvis 5–50 KB, vilket är tiotals gånger mindre än en motsvarande videofil. Enligt Airbnb Engineering (2025) stöder Lottie över 80% av Adobe After Effects funktioner, inklusive masker, effekter, kurvor och uttryck.

Bodymovin — är ett plugin för After Effects (gratis, GitHub) som serialiserar kompositionen till JSON-format som är förståeligt för Lotties körning. After Effects CC 2018 och nyare versioner stöds. För komplexa animationer med många nyckelbildrutor rekommenderas att använda dotLottie — ett format baserat på Lottie JSON, men komprimerat och förpackat i en fil.

Lotties arkitektur: hur rendering fungerar

Lottie använder en skiktad renderingsarkitektur som anpassar sig till plattformens kapacitet. På Android ritas animationen via Canvas API — Lotties egen renderare (LottieDrawable) som inte använder systemanimationer. På iOS förlitar sig Lottie på Core Animation Layers, vilket ger hög prestanda och 60 FPS. På Flutter använder Lottie Skia Canvas via CustomPainter.

Rendering går igenom tre steg: JSON-tolkning — analys av animationen i LottieComposition (alla lager, former, nyckelbilder); interpolering — beräkning av mellanliggande värden mellan nyckelbilder med hänsyn till easing-kurvor; ritning — rendering av den aktuella bilden på Canvas eller via Core Animation. Lottie stöder hårdvaruacceleration: på Android — acceleration via Canvas med Hardware Accelerator, på iOS — CALayer med inbyggd GPU-acceleration av Core Animation.

PlattformRenderareHårdvaruaccelerationBibliotek
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 bridgeBeror på plattformlottie-react-native

Använda Lottie på Android (Kotlin)

På Android utökar LottieAnimationView AppCompatImageView och tar över hela laddnings- och renderingscykeln. JSON-filen placeras i mappen res/raw eller assets. LottieAnimationView stöder uppspelningshantering — play, pause, resume, setFrame, setProgress, repeat, speed — och lyssning via AnimatorUpdateListener och AnimatorListener.

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

// Programmatisk konfiguration av LottieAnimationView
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()
}

// Laddning från assets och cachning
lottieView.setAnimation("animations/confetti.json")
lottieView.setCacheStrategy(LottieAnimationView.CacheStrategy.Strong)

// LottieDrawable — anpassad ritning utan View
val drawable = LottieDrawable().apply {
    setComposition(
        LottieCompositionFactory.fromRawRes(context, R.raw.star)
            .addListener { composition -> composition?.let { setComposition(it); play() } }
    )
}

Bästa praxis för Android: använd setCacheStrategy(CacheStrategy.Strong) för ofta upprepade animationer — kompositionen cachas i minnet och varje ny instans tolkar inte JSON på nytt. För listor (RecyclerView) använd LottieAnimationView med enableMergePathsForKitKatAndAbove(true) och disableExtraScaleModeForOlderWorkarounds() för att optimera rendering. För animationer med transparent bakgrund, ställ in android:layerType="hardware" för GPU-acceleration.

Använda Lottie på iOS (Swift)

På iOS är AnimationView Lotties huvudklass för UIKit och SwiftUI. Den ansluts via Swift Package Manager eller CocoaPods. JSON-filer läggs till i projektets bundle. AnimationView bestämmer automatiskt scale (logisk skärmtäthet) och använder Core Animation för att rendera lager med 60 FPS.

swift
import Lottie

// UIKit: AnimationView med manuell styrning
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("Animationssegment slutfört: \(finished)")
}
view.addSubview(animationView)

// UIKit: animation med förlopp (för bindning till händelse)
animationView.play(fromFrame: AnimationFrameTime(30),
                    toFrame: AnimationFrameTime(90))
swift
// SwiftUI: LottieView som UIViewRepresentable
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
    }
}

// Användning i SwiftUI
LottieView(name: "loading", progress: $animationProgress)
    .frame(width: 100, height: 100)

Bästa praxis för iOS: för animationer som startar direkt efter laddning, använd animationView.play(fromProgress: 0, toProgress: 1) med loopMode = .playOnce för engångseffekter. För Lottie i UITableView/UICollectionView, använd AnimationView med cachad animationsfil via LottieAnimation.cached. Rendering av ett stort antal lager (50+) kan orsaka FPS-fall — i sådana fall, aktivera renderingEngine = .mainThread (standard) eller .coreAnimation för macOS.

Lottie vs video: jämförelse av animationsformat

Lottie skiljer sig i grunden från videofiler: det lagrar inte pixlar, utan beskriver vectorformer, deras transformationer och förändringskurvor över tid. Video (MP4, WebM) — är en sekvens av rasterbildrutor med fast upplösning. Skillnaden visas i filstorlek, skalningskvalitet, interaktivitet och prestanda.

ParameterLottie (JSON)Video (MP4)GIF
Filstorlek5–50 KB200–2000 KB500–5000 KB
SkalningskvalitetVektor (oändlig)Fast (pixel)Fast
InteraktivitetFörlopp, hastighet, paus, färgändringNejNej
Alfakanal (transparens)InbyggdKräver codecStöds
Prestanda (CPU)Låg belastningMedel (avkodning)Hög (rasteravkodning)

När du väljer Lottie: laddningsikoner, gilla-/reaktionsanimationer, onboard-skärm, accentmikroanimationer för knappar. För komplexa scener med 3D-effekter, realistisk belysning eller fotorealistiska karaktärer förblir video ett mer praktiskt val. Lottie är inte avsett för uppspelning av långa scener (över 10 sekunder) — optimal längd för en animation är 2–5 sekunder.

Optimera Lotties prestanda

Lotties prestanda beror på antalet lager, komplexiteten hos masker och effekter samt renderaren. För att bibehålla 60 FPS på medelklassenheter, följ rekommendationerna: begränsa antalet lager till 30–40 per scen, undvik överlappande nästlade pre-compositions, använd dotLottie för komplexa animationer.

kotlin
// Optimera Lottie för RecyclerView
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieDrawable
import com.airbnb.lottie.LottieCompositionFactory

// Cachning av komposition i minnet
private val cache = LottieCompositionFactory.setCacheStrategy(CacheStrategy.Strong)

// Pool av LottieAnimationView för återanvändning
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)
    }
}

// Inaktivering av onödiga funktioner
lottieView.enableMergePathsForKitKatAndAbove(true)
lottieView.setHardwareAcceleration(true)
lottieView.setMaxFrame(60) // Begränsning av antalet bildrutor

Ytterligare optimeringar: aktivera enableMergePathsForKitKatAndAbove(true) för enheter med Android 4.4+ — detta slår samman överlappande konturer till en bana, vilket minskar antalet draw calls. Använd dotLottie istället för JSON — det binära formatet komprimerar animationen med 50–80% genom protobuf-serialisering, vilket minskar tolkningstiden. För animationer i RecyclerView, ställ in repeatCount = 0 (en gång uppspelning) och stoppa animationen vid scrollning via recyclerView.addOnScrollListener. Enligt Airbnb Engineering Blog (2025) minskar dessa åtgärder CPU-belastningen med upp till 40%.

Vanliga frågor

Hur minskar man storleken på Lottie JSON?

Använd dotLottie — ett binärt format baserat på protobuf som komprimerar JSON med 50–80%. I After Effects, exportera via Bodymovin med inställningen «Glyphs» = None (om text inte behövs), stäng av extra guider och guidelager. Ta bort osynliga lager och lager med 0% opacity före export.

Lottie spelas inte på gamla enheter — vad ska man göra?

Kontrollera minsta SDK-version: Lottie för Android stöder API 14+, men vissa effekter (Path Morphing, Gradient) fungerar bara med API 21+. På iOS kräver Lottie iOS 11+. För gamla enheter, använd en fallback — en statisk PNG-bild från animationen. Ladda animationer asynkront via LottieCompositionFactory med felhantering via LottieListener.onFailure.

Kan man ändra färger i Lottie-animation dynamiskt?

Ja, via LottieDynamicProperties eller KeyPath. Ställ in Layer Name i After Effects (t.ex. «icon-fill»), sedan i koden: lottieView.addValueCallback(KeyPath(«icon-fill»), LottieProperty.COLOR) { Color.GREEN }. Detta gör att animationen kan anpassas till appens tema utan att skapa dubbletter av filer. För iOS, använd AnimationView.setValueProvider(ColorValueProvider).

Lottie vs Rive — vad är skillnaden?

Lottie — format för uppspelning av förgjord animation från After Effects. Rive — interaktiv animation med State Machine, triggers och inputs. Lottie passar för passiva animationer (laddning, gilla-markeringar, välkomstskärmar). Rive — för spel, interaktiva UI-element, animationer med återkoppling på användaråtgärder. Rive kräver en egen redigerare, Lottie fungerar via bekanta After Effects.

Hur spårar man slutförandet av Lottie-animation?

På Android: lottieView.addAnimatorListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator?) { ... } }). På iOS: animationView.play { finished in }. I SwiftUI: använd Binding för currentProgress med onChange. För Kotlin Multiplatform, använd LottieAnimatable från biblioteket lottie-compose.

Sammanfattning

  • Lottie — Airbnbs bibliotek för uppspelning av JSON-vektoranimation från After Effects.
  • Bodymovin — exportplugin After Effects → JSON, gratis, öppen källkod.
  • LottieAnimationView (Android) och AnimationView (iOS) — huvudkomponenter för inbäddning.
  • Formatet dotLottie (.lottie) minskar filstorleken med upp till 80% genom protobuf-komprimering.
  • Lottie renderas via Canvas (Android), Core Animation (iOS) eller Skia (Flutter) med 60 FPS.
  • Optimal längd för Lottie-animation — 2–5 sekunder, högst 30–40 lager per scen.
  • För interaktiva animationer med återkoppling, använd Rive, inte Lottie.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också