Lottie, mobil ve web uygulamalarında Adobe After Effects animasyonlarını render etmek için açık kaynaklı bir kütüphanedir. Animasyonlar Bodymovin eklentisi aracılığıyla JSON formatına aktarılır ve iOS, Android, Flutter ve Web'de kalite kaybı olmadan yerel olarak oynatılır. Airbnb Design — Lottie'ye göre, kütüphane 100.000'den fazla uygulamada kullanılmakta, ağır video dosyalarının ve GIF'lerin yerini hafif bir vektör formatı almaktadır.
Önemli Noktalar
Lottie, 2015 yılında Airbnb tarafından oluşturulan, vektör animasyonlarını gerçek zamanlı olarak render etmek için açık kaynaklı bir kütüphanedir. Geliştirici Adobe After Effects'te bir animasyon oluşturur, Bodymovin eklentisi aracılığıyla JSON'a aktarır ve Lottie, katmanları, şekilleri, saydamlığı ve animasyon eğrilerini yorumlayarak bu JSON'u hedef cihazda oynatır.
Video dosyaları veya GIF'lerin aksine, Lottie çözünürlükten bağımsızdır — animasyon vektör olarak render edilir ve herhangi bir DPI'ya sahip cihazlarda aynı görünür. Bir JSON animasyonu, eşdeğer bir GIF veya videodan ortalama 5-10 kat daha küçüktür, bu da sınırlı bant genişliğine sahip mobil uygulamalar için kritiktir.
Airbnb Engineering'e göre, Lottie'nin benimsenmesi, Precomposed video dizilerine kıyasla uygulamadaki animasyon boyutunu %80 oranında azalttı ve tüm desteklenen cihazlarda 60 FPS'yi korudu. Bugün Lottie, iOS, Android, Flutter, React Native, Web (HTML Canvas ve SVG) ve masaüstü platformlarında desteklenmektedir.
Lottie'nin performansı yerel render'dan gelir: iOS'ta CALayer ile Core Animation kullanır, Android'de — JNI aracılığıyla C++'da kendi Canvas render'ını kullanır. Bu, orta segment cihazlarda bile düzinelerce katmana sahip karmaşık animasyonların kare düşüşü olmadan oynatılmasını sağlar. WebView tabanlı çözümlerin (GIF, APNG, video) aksine, Lottie render için ayrı bir işlem oluşturmaz ve kare kod çözme için ekstra bellek tüketmez.
Lottie'yi yüklenme göstergeleri, mikro etkileşimli simgeler, tanıtım ekranları ve akıcılık ile küçük dosya boyutunun önemli olduğu promosyon animasyonları için kullanın.
Lottie ekosistemi, sekiz platform için resmi oynatıcılar, tarayıcıda önizleme için LottieFiles düzenleyicisi ve binlerce hazır animasyon içeren bir pazar yeri içerir. Geliştirici bir JSON indirebilir, projeye entegre edebilir ve After Effects'i açmadan tasarım sistemine göre renkleri ve hızı ayarlayabilir. LottieFiles ayrıca, App Store veya Google Play'de uygulamanın yeni bir sürümünü yayınlamadan cihazlardaki animasyonları güncellemeye olanak tanıyan AIR bağlantısı üzerinden animasyon yükleme özelliğine sahip hızlandırılmış entegrasyon için bir SDK sağlar.
Lottie JSON şeması, vektör animasyonunu tanımlamak için üç seviyeden oluşan açık bir standarttır: kompozisyon, katmanlar ve şekiller. Kompozisyon meta verileri içerir: tuval boyutu, kare hızı ve süre.
Kök JSON nesnesi, layers alanını içerir — bir animasyon katmanları dizisi. Her katman bir Shape Layer, Image Layer, Text Layer veya PreComp Layer olabilir. Her katman için anahtarlara bağlı dönüşüm özellikleri tanımlanır: konum, ölçek, döndürme ve opaklık.
const animationData = {
"v": "5.5.2",
"fr": 60,
"w": 200,
"h": 200,
"layers": [{
"ty": 4,
"nm": "Circle",
"shapes": [{
"ty": "el",
"p": { "k": [100, 100] }
}]
}]
}
Ana kareler (Keyframes), enterpolasyon için zaman damgaları, değerler ve Bezier eğrileri içeren diziler olarak tanımlanır. Bodymovin, After Effects eğrilerini otomatik olarak Lottie uyumlu bir formata dönüştürür ve kare düzeyinde doğrulukla zamanlamayı ve yumuşatma işlevlerini korur.
Bodymovin, bir kompozisyonu Lottie JSON dosyasına aktaran bir Adobe After Effects uzantısıdır. Eklenti, After Effects'in çoğu özelliğini destekler: şekiller, maskeler, efektler, metin katmanları ve izleme. Sınırlamalar 3D katmanlar ve bazı eklentiler için geçerlidir — bunlar dışa aktarılmaz ve animasyonun 2D'ye basitleştirilmesini gerektirir.
iOS'ta Lottie, Swift Package Manager, CocoaPods veya Carthage aracılığıyla entegre edilir. Ana sınıflar SwiftUI için LottieView ve UIKit için LottieAnimationView'dır. lottie-ios paketi, bundle, ağ ve Data nesnelerinden animasyonları destekler.
LottieView, bundle'dan bir JSON dosya adını veya ağdan yükleme için bir URL'yi kabul eden SwiftUI için bir View bileşenidir. Animasyon, belirtilen hızda ve tekrar sayısında otomatik olarak oynatılır.
import Lottie
LottieView(animation: LottieAnimation
.named("loading_spinner"))
.loopMode(.loop)
.animationSpeed(1.5)
.frame(width: 100, height: 100)
UIKit için LottieAnimationView kullanılır, Interface Builder veya programlı olarak yapılandırılabilir. View, tüm animasyon durumlarını destekler: play, pause, stop ve ayrıca veri yükleme için bir ilerleme çubuğu. LottieAnimationView, listelerde animasyonlu simgeler için UITableViewCell veya UICollectionViewCell'e gömülebilir — kaydırma sırasında animasyon duraklar ve hücre ekranda göründüğünde devam eder, CPU ve GPU kaynaklarından tasarruf sağlar.
Modern iOS geliştirme, animasyonlu tanıtım ekranları ve etkileşimli öğeler oluşturmak için SwiftUI ile Lottie'yi aktif olarak kullanır: kaydırma sırasında animasyon ilerlemesi, ScrollViewReader aracılığıyla kaydırma konumuyla senkronize olur. Bu, animasyonun kullanıcının parmak hareketini sürekli olarak takip ettiği bir paralaks efekti yaratarak ağır video dosyaları kullanmadan etkileşimi artırır.
iOS'taki Lottie oynatıcısı, belirli bir kareden diğerine oynatma, KeyPaths aracılığıyla dolgu/kontur renklerini değiştirme ve LottieAnimationDelegate aracılığıyla olayları dinleme için API sağlar. Performansı optimize etmek için kaydırma sırasında animasyon duraklatılabilir ve durduğunda devam ettirilebilir.
Android'de Lottie, com.airbnb.android:lottie Gradle bağımlılığı aracılığıyla eklenir. Ana bileşen LottieAnimationView'dır, XML düzeninde normal bir View olarak yerleştirilebilir ve öznitelikler veya programlı olarak yapılandırılabilir.
@Composable
fun LoadingAnimation() {
val composition by rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(R.raw.loading)
)
LottieAnimation(
composition = composition,
iterations = LottieConstants.IterateForever
)
}
XML düzeninde, LottieAnimationView öznitelikler aracılığıyla yapılandırılır: lottie_rawRes (res/raw içindeki JSON referansı), lottie_autoPlay, lottie_loop. Ağdan yükleme lottie_url veya programlı olarak setAnimationFromUrl aracılığıyla desteklenir. Lottie'nin Android sürümü, donanım hızlandırmadan bağımsız kendi Canvas render'ını kullanır.
Statik animasyonlar için JSON, res/raw içine yerleştirilir ve RawRes aracılığıyla referans alınır. Dinamik animasyonlar için Lottie, indirme yüzdesini gösteren bir ilerleme geri çağrısı ile bir URL veya Data nesnesinden JSON yükler. Lottie önbelleği, yüklenen animasyonları otomatik olarak bellekte tutarak sonraki render'larda yeniden indirmeyi önler.
Android için Lottie, doğrudan liste öğelerine gömülü LottieAnimationView aracılığıyla RecyclerView'da animasyonu destekler. Performans optimizasyonu için, gecikmeli yükleme ile setAnimation kullanılması ve RecyclerView.OnChildAttachStateChangeListener geri çağrısı aracılığıyla ekran dışı öğeler için animasyonun devre dışı bırakılması önerilir. Bu, animasyonlu simgelere sahip uzun listeleri kaydırırken FPS düşüşlerini önler.
Lottie, orijinal After Effects dosyasını değiştirmeden hazır animasyonları özelleştirmek için güçlü bir API sağlar. Bu, tek bir animasyonu farklı temalara, renklere ve uygulama boyutlarına uyarlamaya olanak tanır.
Dolgu ve kontur renkleri, KeyPath (bir animasyon öğesine dize yolu) aracılığıyla çalışma zamanında değiştirilebilir. Örneğin, bir sepet simgesinin rengini kırmızıdan maviye değiştirmek için KeyPath'ini bulun ve yeni değeri uygulayın. Bu, farklı renk şemaları için aynı animasyonun birden çok sürümünü saklama ihtiyacını ortadan kaldırır.
Her Lottie animasyonu hız (animationSpeed), ilerleme (setProgress) ve kare aralığı (play(fromFrame:toFrame:)) ile kontrol edilebilir. İlerleme modu, animasyonu bir kaydırma hareketiyle senkronize etmeye olanak tanır: ekran ne kadar kaydırılırsa, animasyon o kadar ilerler — tanıtım ekranları ve paralaks efektleri için popüler bir tekniktir.
| Parametre | Açıklama | Örnek Değer |
|---|---|---|
| animationSpeed | Oynatma hızı çarpanı | 2.0 — iki kat daha hızlı |
| loopMode | Animasyon tekrar modu | .loop, .repeat(3), .playOnce |
| progress | 0.0'dan 1.0'a manuel kare kontrolü | 0.5 — animasyonun %50'si |
| play(from:to:) | Kare aralığını oynat | play(from: 0, to: 30) |
Sıkça Sorulan Sorular
Lottie, çözünürlükten bağımsız bir vektör formatı kullanır ve bir GIF'ten 5-10 kat daha az yer kaplar. Videonun aksine, Lottie şeffaf arka planlar, çalışma zamanında renk değişiklikleri ve kalite kaybı olmadan isteğe bağlı boyutlandırmayı destekler, bu da onu uyarlanabilir arayüzler için ideal kılar.
Kare kaybı olmadan JSON'u sıkıştırmak için lottie-image-compressor aracını kullanın. After Effects'te orijinal animasyonu optimize edin: ana kare sayısını azaltın, vektör katmanları yerine raster görüntülerden kaçının ve karmaşık maskeleri basitleştirin.
Evet, Lottie After Effects'ten metin katmanlarını (yazı tipleri, boyut, renk ve hizalama dahil) destekler. Metin bazı platformlarda çalışma zamanında dinamik olarak değiştirilebilir, ancak farklı yazı tiplerine sahip karmaşık metinler için yerel UI bileşenlerini kullanmak daha iyidir.
Evet, Lottie animasyonlu logolar için mükemmeldir. Vektör formatı, Apple Watch'tan 4K monitörlere kadar her ekranda keskinlik sağlar. Marka değiştiğinde, logo renkleri animasyonu yeniden dışa aktarmadan KeyPath aracılığıyla güncellenebilir.
Saf Lottie, JSON içinde etkileşimli tetikleyicileri desteklemez. Etkileşim için animasyon, düğmeye basıldığında veya kaydırma yapıldığında kod tarafından başlatılan parçalara bölünür. İlerleme modu, paralaks efektleri oluşturmak için animasyonu bir harekete bağlamaya olanak tanır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun