Lottie: چیست، انیمیشن‌ها و نحوه کار در پلتفرم‌های موبایل

نویسنده: IT Sectr منتشر شده: 2026-05-04 زمان مطالعه: 8 دقیقه

Lottie — این کتابخانه‌ای برای رندر کردن انیمیشن‌های Adobe After Effects در برنامه‌های موبایل و وب است. انیمیشن‌ها از طریق پلاگین Bodymovin به فرمت JSON صادر شده و به صورت بومی در iOS، Android، Flutter و Web بدون افت کیفیت پخش می‌شوند. به گفته Airbnb Design — Lottie، این کتابخانه در بیش از ۱۰۰٬۰۰۰ برنامه استفاده می‌شود و فایل‌های ویدیویی سنگین و GIF را با فرمت برداری سبک جایگزین می‌کند.

نکات اصلی

  • Lottie — کتابخانه Airbnb برای رندر انیمیشن‌های After Effects در پلتفرم‌های موبایل و وب.
  • Bodymovin — پلاگینی برای After Effects که انیمیشن‌ها را به فرمت JSON صادر می‌کند.
  • طرح JSON Lottie لایه‌ها، اشکال، فریم‌های کلیدی و منحنی‌های درون‌یابی را توصیف می‌کند.
  • یکپارچه‌سازی iOS — LottieView از Swift Package Manager برای SwiftUI و UIKit.
  • یکپارچه‌سازی Android — LottieAnimationView در XML از طریق وابستگی Gradle.

Lottie چیست و چگونه کار می‌کند

Lottie — این یک کتابخانه متن‌باز است که توسط Airbnb در سال ۲۰۱۵ برای رندر انیمیشن‌های برداری در زمان واقعی ساخته شده است. توسعه‌دهنده انیمیشن را در Adobe After Effects ایجاد می‌کند، آن را از طریق پلاگین Bodymovin به JSON صادر می‌کند و Lottie این JSON را در دستگاه هدف با تفسیر لایه‌ها، اشکال، شفافیت و منحنی‌های انیمیشن پخش می‌کند.

برخلاف فایل‌های ویدیویی یا GIF، Lottie به وضوح صفحه نمایش وابسته نیست — انیمیشن به صورت برداری رندر شده و در دستگاه‌هایی با هر DPI یکسان به نظر می‌رسد. اندازه انیمیشن JSON به طور متوسط ۵-۱۰ برابر کوچک‌تر از GIF یا ویدیوی معادل است که برای برنامه‌های موبایل با ترافیک محدود حیاتی است.

به گفته Airbnb Engineering، پیاده‌سازی Lottie اندازه انیمیشن‌ها را در برنامه در مقایسه با ویدیوی Precomposed ۸۰٪ کاهش داده است، در حالی که نرخ فریم در تمام دستگاه‌های پشتیبانی‌شده ۶۰ FPS باقی مانده است. امروزه Lottie در iOS، Android، Flutter، React Native، Web (HTML Canvas و SVG) و پلتفرم‌های دسکتاپ پشتیبانی می‌شود.

عملکرد Lottie توسط رندر بومی تضمین می‌شود: در iOS از Core Animation با CALayer استفاده می‌شود، در Android — رندرر Canvas خود به زبان C++ از طریق JNI. این اجازه می‌دهد انیمیشن‌های پیچیده با ده‌ها لایه حتی در دستگاه‌های میان‌رده بدون افت فریم پخش شوند. برخلاف راه‌حل‌های WebView (GIF، APNG، ویدیو)، Lottie یک فرآیند جداگانه برای رندر ایجاد نمی‌کند و حافظه اضافی برای رمزگشایی فریم‌ها مصرف نمی‌کند.

از Lottie برای نشانگرهای بارگذاری، آیکون‌های با تعاملات ریز، صفحه‌های خوش‌آمدگویی و انیمیشن‌های تبلیغاتی جشن استفاده کنید، جایی که نرمی و اندازه کوچک مهم است.

اکوسیستم Lottie شامل پخش‌کننده‌های رسمی برای هشت پلتفرم، ویرایشگر LottieFiles برای پیش‌نمایش در مرورگر و بازار با هزاران انیمیشن آماده است. توسعه‌دهنده می‌تواند JSON را دانلود، در پروژه یکپارچه کرده و رنگ‌ها و سرعت را مطابق با سیستم طراحی بدون باز کردن After Effects تنظیم کند. LottieFiles همچنین SDK را برای یکپارچه‌سازی سریع‌تر با قابلیت بارگذاری انیمیشن‌ها از طریق لینک AIR فراهم می‌کند که به‌روزرسانی انیمیشن‌ها را در دستگاه‌ها بدون انتشار نسخه جدید برنامه در App Store یا Google Play امکان‌پذیر می‌سازد.

فرمت JSON Lottie و Bodymovin

طرح JSON Lottie — این یک استاندارد باز برای توصیف انیمیشن برداری است که از سه سطح تشکیل شده است: ترکیب‌بندی (composition)، لایه‌ها (layers) و اشکال (shapes). ترکیب‌بندی شامل فراداده‌ها: اندازه بوم، نرخ فریم و مدت زمان.

ساختار JSON

شیء ریشه JSON شامل فیلد layers — آرایه‌ای از لایه‌های انیمیشن است. هر لایه می‌تواند یک شکل (Shape Layer)، تصویر (Image Layer)، متن (Text Layer) یا پیش‌ترکیب (PreComp Layer) باشد. برای هر لایه ویژگی‌های تبدیل مشخص می‌شود: موقعیت، مقیاس، چرخش و شفافیت با پیوند به فریم‌های کلیدی.

js
const animationData = {
    "v": "5.5.2",
    "fr": 60,
    "w": 200,
    "h": 200,
    "layers": [{
        "ty": 4,
        "nm": "Circle",
        "shapes": [{
            "ty": "el",
            "p": { "k": [100, 100] }
        }]
    }]
}

فریم‌های کلیدی (Keyframes) با آرایه‌هایی از مهرهای زمانی، مقادیر و منحنی‌های Bezier برای درون‌یابی مشخص می‌شوند. Bodymovin به طور خودکار منحنی‌های After Effects را به فرمت قابل فهم برای Lottie تبدیل می‌کند، زمان‌بندی و توابع ease را با دقت فریم حفظ می‌کند.

Bodymovin — پلاگین صادرات

Bodymovin — این افزونه‌ای برای Adobe After Effects است که ترکیب‌بندی را به فایل JSON Lottie صادر می‌کند. این پلاگین از بیشتر قابلیت‌های After Effects پشتیبانی می‌کند: اشکال، ماسک‌ها، افکت‌ها، لایه‌های متنی و ردیابی. محدودیت‌ها مربوط به لایه‌های سه‌بعدی و برخی پلاگین‌ها است — آنها صادر نمی‌شوند و نیاز به ساده‌سازی انیمیشن به دو بعد دارند.

یکپارچه‌سازی Lottie در iOS

در iOS Lottie از طریق Swift Package Manager، CocoaPods یا Carthage یکپارچه می‌شود. کلاس اصلی — LottieView برای SwiftUI و LottieAnimationView برای UIKit. بسته lottie-ios شامل پشتیبانی از انیمیشن‌های باندل، شبکه و اشیاء Data است.

LottieView در SwiftUI

LottieView — این یک کامپوننت View برای SwiftUI است که نام فایل JSON را از باندل یا URL برای بارگذاری از شبکه دریافت می‌کند. انیمیشن به طور خودکار با سرعت و تعداد تکرار مشخص پخش می‌شود.

swift
import Lottie

LottieView(animation: LottieAnimation
    .named("loading_spinner"))
    .loopMode(.loop)
    .animationSpeed(1.5)
    .frame(width: 100, height: 100)

برای UIKit از LottieAnimationView با پیکربندی از طریق Interface Builder یا برنامه‌نویسی استفاده می‌شود. View از تمام حالت‌های انیمیشن پشتیبانی می‌کند: play، pause، stop و همچنین نوار پیشرفت برای بارگذاری داده. LottieAnimationView را می‌توان در UITableViewCell یا UICollectionViewCell برای آیکون‌های متحرک در لیست‌ها جاسازی کرد — هنگام اسکرول سلول، انیمیشن متوقف می‌شود و پس از ظاهر شدن روی صفحه از سر گرفته می‌شود که باعث صرفه‌جویی در منابع CPU و GPU می‌شود.

توسعه مدرن iOS به طور فعال از Lottie در ترکیب با SwiftUI برای ایجاد صفحه‌های خوش‌آمدگویی متحرک و عناصر تعاملی استفاده می‌کند: هنگام اسکرول صفحه، پیشرفت انیمیشن با موقعیت اسکرول از طریق ScrollViewReader همگام می‌شود. این اثر پارالاکس ایجاد می‌کند که در آن انیمیشن به طور پیوسته از حرکت انگشت کاربر پیروی می‌کند و تعامل را بدون استفاده از فایل‌های ویدیویی سنگین افزایش می‌دهد.

مدیریت پخش

پخش‌کننده Lottie در iOS API را برای پخش از فریم مشخص تا فریم مشخص، تغییر رنگ پر/حاشیه از طریق KeyPaths و گوش دادن به رویدادها از طریق LottieAnimationDelegate فراهم می‌کند. می‌توان انیمیشن را هنگام اسکرول متوقف کرد و پس از توقف برای بهینه‌سازی عملکرد از سر گرفت.

یکپارچه‌سازی Lottie در Android

در Android Lottie از طریق وابستگی Gradle com.airbnb.android:lottie متصل می‌شود. کامپوننت اصلی — LottieAnimationView که می‌تواند در طرح XML به عنوان یک View معمولی قرار گرفته و از طریق ویژگی‌ها یا برنامه‌نویسی پیکربندی شود.

kotlin
@Composable
fun LoadingAnimation() {
    val composition by rememberLottieComposition(
        spec = LottieCompositionSpec.RawRes(R.raw.loading)
    )
    LottieAnimation(
        composition = composition,
        iterations = LottieConstants.IterateForever
    )
}

در طرح XML LottieAnimationView از طریق ویژگی‌ها پیکربندی می‌شود: lottie_rawRes (ارجاع به JSON در res/raw)، lottie_autoPlay، lottie_loop. بارگذاری از شبکه از طریق lottie_url یا برنامه‌نویسی از طریق setAnimationFromUrl پشتیبانی می‌شود. نسخه Android Lottie از رندرر Canvas خود استفاده می‌کند که مستقل از شتاب سخت‌افزاری است.

بارگذاری از RawRes و شبکه

برای انیمیشن‌های ایستا، JSON در res/raw قرار گرفته و از طریق RawRes ارجاع داده می‌شود. برای انیمیشن‌های پویا، Lottie JSON را از URL یا شیء Data با بازخورد پیشرفت که درصد بارگذاری را نشان می‌دهد بارگیری می‌کند. حافظه نهان Lottie به طور خودکار انیمیشن‌های بارگیری شده را در حافظه ذخیره می‌کند تا از بارگیری مجدد هنگام رندر مجدد جلوگیری کند.

Lottie برای Android از انیمیشن در RecyclerView از طریق LottieAnimationView تعبیه شده مستقیماً در عنصر لیست پشتیبانی می‌کند. برای بهینه‌سازی عملکرد، توصیه می‌شود از setAnimation با بارگذاری تأخیری استفاده کرده و انیمیشن را برای عناصر نامرئی روی صفحه از طریق بازخورد RecyclerView.OnChildAttachStateChangeListener غیرفعال کنید. این از افت FPS هنگام اسکرول لیست‌های طولانی با آیکون‌های متحرک جلوگیری می‌کند.

شخصی‌سازی و مدیریت انیمیشن‌های Lottie

Lottie API قدرتمندی برای شخصی‌سازی انیمیشن‌های آماده بدون تغییر فایل اصلی After Effects فراهم می‌کند. این امکان تطبیق یک انیمیشن با تم‌ها، رنگ‌ها و اندازه‌های مختلف برنامه را فراهم می‌کند.

تغییر رنگ از طریق KeyPath

رنگ‌های پر و حاشیه را می‌توان در زمان اجرا از طریق KeyPath — مسیر رشته‌ای به عنصر انیمیشن — تغییر داد. به عنوان مثال، برای جایگزینی رنگ آیکون سبد خرید از قرمز به آبی، کافی است KeyPath آن را پیدا کرده و مقدار جدیدی اعمال کنید. این کار نیاز به ذخیره چندین نسخه از یک انیمیشن برای طرح‌های رنگی مختلف را از بین می‌برد.

مدیریت سرعت و پیشرفت

هر انیمیشن Lottie را می‌توان از نظر سرعت (animationSpeed)، پیشرفت (setProgress) و محدوده فریم (play(fromFrame:toFrame:)) کنترل کرد. حالت پیشرفت امکان همگام‌سازی انیمیشن با ژست اسکرول را فراهم می‌کند: هرچه صفحه بیشتر اسکرول شود، انیمیشن پیشرفته‌تر است — این تکنیک محبوبی برای صفحه‌های خوش‌آمدگویی و افکت‌های پارالاکس است.

پارامترتوضیحاتمقدار نمونه
animationSpeedضریب سرعت پخش2.0 — دو برابر سریع‌تر
loopModeحالت تکرار انیمیشن.loop, .repeat(3), .playOnce
progressکنترل دستی فریم از 0.0 تا 1.00.5 — ۵۰٪ انیمیشن
play(from:to:)پخش محدوده فریمplay(from: 0, to: 30)

سوالات متداول

Lottie چه تفاوتی با GIF و ویدیو دارد؟

Lottie از فرمت برداری مستقل از وضوح استفاده می‌کند و ۵-۱۰ برابر کمتر از GIF فضا اشغال می‌کند. برخلاف ویدیو، Lottie از پس‌زمینه شفاف، تغییر رنگ در زمان اجرا و اندازه دلخواه بدون افت کیفیت پشتیبانی می‌کند که آن را برای رابط‌های تطبیقی ایده‌آل می‌کند.

چگونه اندازه فایل Lottie را کاهش دهیم؟

از ابزار lottie-image-compressor برای فشرده‌سازی JSON بدون افت فریم استفاده کنید. انیمیشن اصلی را در After Effects بهینه کنید: تعداد فریم‌های کلیدی را کاهش دهید، به جای لایه‌های برداری از تصاویر شطرنجی خودداری کنید و ماسک‌های پیچیده را ساده کنید.

آیا Lottie از لایه‌های متنی پشتیبانی می‌کند؟

بله، Lottie از لایه‌های متنی After Effects از جمله فونت‌ها، اندازه، رنگ و تراز پشتیبانی می‌کند. متن را می‌توان در برخی پلتفرم‌ها به صورت پویا در زمان اجرا تغییر داد، اما برای متن پیچیده با فونت‌های مختلف بهتر است از کامپوننت‌های بومی UI استفاده کنید.

آیا می‌توان از Lottie برای لوگوها استفاده کرد؟

بله، Lottie برای لوگوهای متحرک عالی است. فرمت برداری وضوح را در هر صفحه‌ای از Apple Watch تا مانیتور 4K تضمین می‌کند. هنگام تغییر برند، رنگ‌های لوگو را می‌توان از طریق KeyPath بدون صادرات مجدد انیمیشن به‌روزرسانی کرد.

آیا Lottie از انیمیشن‌های تعاملی پشتیبانی می‌کند؟

Lottie خالص از محرک‌های تعاملی درون JSON پشتیبانی نمی‌کند. برای تعامل، انیمیشن به بخش‌هایی تقسیم می‌شود که با فشار دکمه یا اسکرول توسط کد راه‌اندازی می‌شوند. حالت پیشرفت امکان اتصال انیمیشن به ژست برای ایجاد افکت‌های پارالاکس را فراهم می‌کند.

خلاصه

  • Lottie — انیمیشن برداری از After Effects که به صورت بومی در تمام پلتفرم‌های موبایل پخش می‌شود.
  • Bodymovin — پلاگین After Effects که ترکیب‌بندی‌ها را به فرمت JSON باز Lottie صادر می‌کند.
  • JSON شامل ترکیب‌بندی، لایه‌ها، اشکال و فریم‌های کلیدی با منحنی‌های Bezier برای درون‌یابی نرم است.
  • در iOS یکپارچه‌سازی از طریق LottieView (SwiftUI) یا LottieAnimationView (UIKit) از Swift Package Manager.
  • در Android — LottieAnimationView در XML یا LottieComposable برای Jetpack Compose.
  • KeyPath امکان تغییر رنگ‌های پر/حاشیه در زمان اجرا بدون صادرات مجدد انیمیشن از After Effects را فراهم می‌کند.
  • Lottie ۵-۱۰ برابر فشرده‌تر از GIF است، از شفافیت و هر اندازه‌ای بدون افت کیفیت پشتیبانی می‌کند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید