Lottie — Airbnb-এর একটি ওপেন-সোর্স লাইব্রেরি যা Bodymovin প্লাগইনের মাধ্যমে Adobe After Effects থেকে JSON ফরম্যাটে রপ্তানি করা ভেক্টর অ্যানিমেশন রেন্ডার করে। অ্যানিমেশনগুলি প্রোগ্রামেটিকভাবে রেন্ডার হয়, যেকোনো স্ক্রিন রেজোলিউশনে গুণমান হারানো ছাড়া। GitHub (2026) অনুসারে, Lottie iOS, Android এবং ওয়েবে 50,000-এরও বেশি প্রকল্পে ব্যবহৃত হয়। অন্যান্য ধরনের অ্যানিমেশন সম্পর্কে আরও জানতে অ্যানিমেশনের সাধারণ নির্দেশিকা দেখুন।
মূল বিষয়সমূহ
Lottie — একটি ক্রস-প্ল্যাটফর্ম লাইব্রেরি যা ভেক্টর অ্যানিমেশন চালানোর জন্য, 2015 সালে Airbnb-এ তৈরি। এটি ভারী ভিডিও ফাইল এবং রাস্টার স্প্রাইট শিটের সমস্যা সমাধান করে: ডিজাইনার After Effects-এ অ্যানিমেশন তৈরি করে, Bodymovin-এর মাধ্যমে JSON-এ রপ্তানি করে এবং ডেভেলপার এই ফাইলটি মোবাইল অ্যাপে এম্বেড করে। Lottie প্ল্যাটফর্মের উপর নির্ভর করে Canvas, Core Animation বা Skia-এর মাধ্যমে প্রোগ্রামেটিকভাবে অ্যানিমেশন রেন্ডার করে।
Lottie-এর প্রধান সুবিধা — ভেক্টর অ্যানিমেশন যেকোনো স্ক্রিনে গুণমান না হারিয়ে স্কেল হয়: Apple Watch থেকে 4K টিভি পর্যন্ত। অ্যানিমেশন JSON ফাইলের আকার সাধারণত 5–50 KB হয়, যা সমতুল্য ভিডিও ফাইলের তুলনায় দশগুণ ছোট। Airbnb Engineering (2025) অনুসারে, Lottie Adobe After Effects-এর 80% এরও বেশি বৈশিষ্ট্য সমর্থন করে, যার মধ্যে মাস্ক, ইফেক্ট, কার্ভ এবং এক্সপ্রেশন রয়েছে।
Bodymovin — After Effects-এর জন্য একটি প্লাগইন (বিনামূল্যে, GitHub) যা Lottie রানটাইম দ্বারা বোঝা যায় এমন JSON ফরম্যাটে একটি কম্পোজিশনকে সিরিয়ালাইজ করে। After Effects CC 2018 এবং নতুন সংস্করণ সমর্থন করে। অনেক কীফ্রেম সহ জটিল অ্যানিমেশনের জন্য, dotLottie সুপারিশ করা হয় — একটি ফরম্যাট যা Lottie JSON-এর উপর ভিত্তি করে কিন্তু সংকুচিত এবং একটি ফাইলে প্যাকেজ করা।
Lottie একটি স্তরযুক্ত রেন্ডারিং আর্কিটেকচার ব্যবহার করে যা প্ল্যাটফর্মের ক্ষমতার সাথে খাপ খায়। Android-এ, অ্যানিমেশন Canvas API-এর মাধ্যমে আঁকা হয় — Lottie-এর নিজস্ব রেন্ডারার (LottieDrawable), যা সিস্টেম অ্যানিমেশন ব্যবহার করে না। iOS-এ, Lottie Core Animation Layers-এর উপর নির্ভর করে, যা উচ্চ পারফরম্যান্স এবং 60 FPS প্রদান করে। Flutter-এ, Lottie CustomPainter-এর মাধ্যমে Skia Canvas ব্যবহার করে।
রেন্ডারিং তিনটি ধাপের মধ্য দিয়ে যায়: JSON পার্সিং — LottieComposition-এ অ্যানিমেশন পার্স করা (সমস্ত লেয়ার, আকার, কীফ্রেম); ইন্টারপোলেশন — ইজিং কার্ভ বিবেচনা করে কীফ্রেমের মধ্যে মধ্যবর্তী মান গণনা করা; ড্রয়িং — Canvas-এ বা Core Animation-এর মাধ্যমে বর্তমান ফ্রেম রেন্ডার করা। Lottie হার্ডওয়্যার এক্সিলারেশন সমর্থন করে: Android-এ — Hardware Accelerator সহ Canvas-এর মাধ্যমে এক্সিলারেশন, iOS-এ — Core Animation-এর বিল্ট-ইন GPU এক্সিলারেশন সহ CALayer।
| প্ল্যাটফর্ম | রেন্ডারার | হার্ডওয়্যার এক্সিলারেশন | লাইব্রেরি |
|---|---|---|---|
| Android | Canvas (LottieDrawable) | Hardware Accelerator (API 14+) | com.airbnb.lottie |
| iOS | Core Animation (CALayer) | GPU (Metal, OpenGL) | Lottie-iOS |
| Flutter | Skia Canvas (CustomPainter) | Impeller (Flutter 3.16+) | lottie_flutter |
| React Native | Native bridge | প্ল্যাটফর্মের উপর নির্ভর করে | lottie-react-native |
Android-এ, LottieAnimationView AppCompatImageView-কে প্রসারিত করে এবং সম্পূর্ণ লোডিং এবং রেন্ডারিং চক্র পরিচালনা করে। JSON ফাইলটি res/raw বা assets ফোল্ডারে রাখা হয়। LottieAnimationView প্লেব্যাক নিয়ন্ত্রণ সমর্থন করে — play, pause, resume, setFrame, setProgress, repeat, speed — এবং AnimatorUpdateListener ও AnimatorListener-এর মাধ্যমে শোনা।
<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" />
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieListener
// 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()
}
// assets থেকে লোডিং এবং ক্যাশিং
lottieView.setAnimation("animations/confetti.json")
lottieView.setCacheStrategy(LottieAnimationView.CacheStrategy.Strong)
// LottieDrawable — View ছাড়া কাস্টম ড্রইং
val drawable = LottieDrawable().apply {
setComposition(
LottieCompositionFactory.fromRawRes(context, R.raw.star)
.addListener { composition -> composition?.let { setComposition(it); play() } }
)
}
Android সেরা অভ্যাস: বারবার পুনরাবৃত্তি হওয়া অ্যানিমেশনের জন্য setCacheStrategy(CacheStrategy.Strong) ব্যবহার করুন — কম্পোজিশন মেমরিতে ক্যাশে হয় এবং প্রতিটি নতুন ইনস্ট্যান্স JSON আবার পার্স করে না। তালিকার (RecyclerView) জন্য, রেন্ডারিং অপ্টিমাইজ করতে enableMergePathsForKitKatAndAbove(true) এবং disableExtraScaleModeForOlderWorkarounds() সহ LottieAnimationView ব্যবহার করুন। স্বচ্ছ ব্যাকগ্রাউন্ডযুক্ত অ্যানিমেশনের জন্য, GPU এক্সিলারেশনের জন্য android:layerType="hardware" সেট করুন।
iOS-এ, AnimationView UIKit এবং SwiftUI-এর জন্য প্রধান Lottie ক্লাস। এটি Swift Package Manager বা CocoaPods-এর মাধ্যমে যুক্ত করা হয়। JSON ফাইলগুলি প্রজেক্ট বান্ডলে যুক্ত করা হয়। AnimationView স্বয়ংক্রিয়ভাবে স্কেল (লজিক্যাল স্ক্রিন ডেনসিটি) নির্ধারণ করে এবং 60 FPS-এ লেয়ার রেন্ডার করতে Core Animation ব্যবহার করে।
import Lottie
// UIKit: ম্যানুয়াল নিয়ন্ত্রণ সহ 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("Animation segment finished: \(finished)")
}
view.addSubview(animationView)
// UIKit: অগ্রগতি সহ অ্যানিমেশন (ইভেন্টের সাথে বাঁধাইয়ের জন্য)
animationView.play(fromFrame: AnimationFrameTime(30),
toFrame: AnimationFrameTime(90))
// SwiftUI: UIViewRepresentable হিসাবে 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-তে ব্যবহার
LottieView(name: "loading", progress: $animationProgress)
.frame(width: 100, height: 100)
iOS সেরা অভ্যাস: লোড হওয়ার সাথে সাথেই শুরু হওয়া অ্যানিমেশনের জন্য, এককালীন অ্যাকসেন্ট ইফেক্টের জন্য loopMode = .playOnce সহ animationView.play(fromProgress: 0, toProgress: 1) ব্যবহার করুন। UITableView/UICollectionView-এ Lottie-এর জন্য, LottieAnimation.cached-এর মাধ্যমে ক্যাশে করা অ্যানিমেশন ফাইল সহ AnimationView ব্যবহার করুন। বিপুল সংখ্যক লেয়ার (50+) রেন্ডার করলে FPS কমতে পারে — সেক্ষেত্রে macOS-এর জন্য renderingEngine = .mainThread (ডিফল্ট) বা .coreAnimation সক্ষম করুন।
Lottie মূলত ভিডিও ফাইল থেকে আলাদা: এটি পিক্সেল সংরক্ষণ করে না, বরং ভেক্টর আকৃতি, তাদের রূপান্তর এবং সময়ের সাথে পরিবর্তনের বক্ররেখা বর্ণনা করে। ভিডিও (MP4, WebM) একটি নির্দিষ্ট রেজোলিউশনে রাস্টার ফ্রেমের একটি ক্রম। পার্থক্যটি ফাইলের আকার, স্কেলিং গুণমান, ইন্টারঅ্যাকটিভিটি এবং পারফরম্যান্সে প্রকাশ পায়।
| প্যারামিটার | Lottie (JSON) | ভিডিও (MP4) | GIF |
|---|---|---|---|
| ফাইলের আকার | 5–50 KB | 200–2000 KB | 500–5000 KB |
| স্কেলিং গুণমান | ভেক্টর (অসীম) | নির্দিষ্ট (পিক্সেল) | নির্দিষ্ট |
| ইন্টারঅ্যাকটিভিটি | অগ্রগতি, গতি, বিরাম, রং পরিবর্তন | না | না |
| আলফা চ্যানেল (স্বচ্ছতা) | নেটিভ | কোডেক প্রয়োজন | সমর্থিত |
| পারফরম্যান্স (CPU) | কম লোড | মাঝারি (ডিকোডিং) | উচ্চ (রাস্টার ডিকোডিং) |
কখন Lottie বেছে নেবেন: লোডিং আইকন, লাইক/রিঅ্যাকশন অ্যানিমেশন, অনবোর্ডিং স্ক্রিন, বাটনের অ্যাকসেন্ট মাইক্রো-অ্যানিমেশন। 3D ইফেক্ট, বাস্তবসম্মত আলোকসজ্জা বা ফটোরিয়ালিস্টিক ক্যারেক্টার সহ জটিল দৃশ্যের জন্য, ভিডিও আরও ব্যবহারিক পছন্দ। Lottie দীর্ঘ দৃশ্য (10 সেকেন্ডের বেশি) চালানোর জন্য ডিজাইন করা হয়নি — একটি অ্যানিমেশনের সর্বোত্তম সময়কাল 2–5 সেকেন্ড।
Lottie পারফরম্যান্স লেয়ারের সংখ্যা, মাস্ক এবং ইফেক্টের জটিলতা এবং রেন্ডারারের উপর নির্ভর করে। মিড-রেঞ্জ ডিভাইসে 60 FPS বজায় রাখতে, এই সুপারিশগুলি অনুসরণ করুন: প্রতি দৃশ্যে লেয়ারের সংখ্যা 30–40 এ সীমাবদ্ধ করুন, ওভারল্যাপিং নেস্টেড প্রি-কম্পোজিশন এড়িয়ে চলুন, জটিল অ্যানিমেশনের জন্য dotLottie ব্যবহার করুন।
// RecyclerView-এর জন্য Lottie অপ্টিমাইজেশন
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieDrawable
import com.airbnb.lottie.LottieCompositionFactory
// মেমরিতে কম্পোজিশন ক্যাশিং
private val cache = LottieCompositionFactory.setCacheStrategy(CacheStrategy.Strong)
// পুনরায় ব্যবহারের জন্য LottieAnimationView পুল
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)
}
}
// অপ্রয়োজনীয় বৈশিষ্ট্য নিষ্ক্রিয় করা
lottieView.enableMergePathsForKitKatAndAbove(true)
lottieView.setHardwareAcceleration(true)
lottieView.setMaxFrame(60) // ফ্রেম সংখ্যা সীমিত করা
অতিরিক্ত অপ্টিমাইজেশন: Android 4.4+ যুক্ত ডিভাইসের জন্য enableMergePathsForKitKatAndAbove(true) সক্ষম করুন — এটি ওভারল্যাপিং পাথগুলিকে একটি পাথে মার্জ করে, ড্র কলের সংখ্যা হ্রাস করে। JSON-এর পরিবর্তে dotLottie ব্যবহার করুন — বাইনারি ফরম্যাট protobuf সিরিয়ালাইজেশনের মাধ্যমে অ্যানিমেশন 50–80% সংকুচিত করে, পার্সিং সময় হ্রাস করে। RecyclerView-এ অ্যানিমেশনের জন্য, repeatCount = 0 (একক প্লে) সেট করুন এবং recyclerView.addOnScrollListener-এর মাধ্যমে স্ক্রলে অ্যানিমেশন বন্ধ করুন। Airbnb Engineering Blog (2025) অনুসারে, এই ব্যবস্থাগুলি CPU লোড 40% পর্যন্ত কমায়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
dotLottie ব্যবহার করুন — একটি বাইনারি ফরম্যাট যা protobuf-এর উপর ভিত্তি করে এবং JSON 50–80% সংকুচিত করে। After Effects-এ, "Glyphs" সেটিং = None (যদি টেক্সট প্রয়োজন না হয়) সহ Bodymovin-এর মাধ্যমে রপ্তানি করুন, অপ্রয়োজনীয় গাইড এবং গাইড লেয়ার নিষ্ক্রিয় করুন। রপ্তানির আগে অদৃশ্য লেয়ার এবং 0% অস্বচ্ছতার লেয়ার সরান।
ন্যূনতম SDK সংস্করণ পরীক্ষা করুন: Android-এর জন্য Lottie API 14+ সমর্থন করে, কিন্তু কিছু ইফেক্ট (Path Morphing, Gradient) শুধুমাত্র API 21+ এ কাজ করে। iOS-এ, Lottie-র জন্য iOS 11+ প্রয়োজন। পুরানো ডিভাইসের জন্য, ফলব্যাক ব্যবহার করুন — অ্যানিমেশন থেকে একটি স্ট্যাটিক png ফ্রেম। LottieCompositionFactory-এর মাধ্যমে অ্যানিমেশন অ্যাসিঙ্ক্রোনাসভাবে লোড করুন এবং LottieListener.onFailure-এর মাধ্যমে ত্রুটি পরিচালনা করুন।
হ্যাঁ, LottieDynamicProperties বা KeyPath-এর মাধ্যমে। After Effects-এ লেয়ার নাম সেট করুন (যেমন, "icon-fill"), তারপর কোডে: lottieView.addValueCallback(KeyPath("icon-fill"), LottieProperty.COLOR) { Color.GREEN }. এটি ডুপ্লিকেট ফাইল তৈরি না করেই অ্যানিমেশনকে অ্যাপ থিম অনুযায়ী কাস্টমাইজ করতে দেয়। iOS-এর জন্য, AnimationView.setValueProvider(ColorValueProvider) ব্যবহার করুন।
Lottie — After Effects থেকে পূর্ব-নির্মিত অ্যানিমেশন চালানোর জন্য একটি ফরম্যাট। Rive — State Machine, ট্রিগার এবং ইনপুট সহ ইন্টারঅ্যাকটিভ অ্যানিমেশন। Lottie প্যাসিভ অ্যানিমেশন (লোডিং, লাইক, ওয়েলকাম স্ক্রিন) এর জন্য উপযুক্ত। Rive গেম, ইন্টারঅ্যাকটিভ UI এলিমেন্ট, ব্যবহারকারীর ক্রিয়ায় প্রতিক্রিয়া সহ অ্যানিমেশনের জন্য। Rive-এর নিজস্ব এডিটর প্রয়োজন, Lottie পরিচিত After Effects-এর মাধ্যমে কাজ করে।
Android-এ: lottieView.addAnimatorListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator?) { ... } }). iOS-এ: animationView.play { finished in }. SwiftUI-তে: onChange সহ currentProgress-এর জন্য Binding ব্যবহার করুন। Kotlin Multiplatform-এর জন্য, lottie-compose লাইব্রেরি থেকে LottieAnimatable ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন