Lottie—簡介

Lottie是什麼?

Lottie 是Airbnb開源的一個面向 iOS、Android、React Native 的動畫庫,能分析 Adobe After Effects 導出的動畫,並且能讓原生 App 像使用靜態素材一樣使用這些動畫,完美實現動畫效果。
Lottie項目地址:https://github.com/airbnb/lottie-android

官方效果圖:

           

                                                                           

所有這些動畫都是在After Effects中創建的,使用Bodymovin導出,並且無需額外的工程師工作即可完成原生渲染。

Bodymovin是一個又Hernan Torrisi創建的After Effects插件,導出文件格式爲json和包括一個javascript網絡播放器。而它最大的優點是提供了一套完整的跨平臺動畫實現工作流;

 

                                    

Lottie實現原理

                                                                    

設計師把一張複雜的圖片使用多個圖層來表示,每個圖層展示一部分內容,圖層中的內容也可以拆分爲多個元素。拆分元素之後,根據動畫需求,可以單獨對圖層或者圖層中的元素做平移、旋轉、收縮等動畫。

Lottie的使用的資源是需要先通過bodymovin( bodymovin 插件本身是用於網頁上呈現各種AE效果的一個開源庫)將 Adobe After Effects (AE)生成的aep動畫工程文件轉換爲通用的json格式描述文件。Lottie則負責解析動畫的數據,計算每個動畫在某個時間點的狀態,準確地繪製到屏幕上。

性能

1.官方說明

如果沒有mask和mattes,那麼性能和內存非常好,沒有bitmap創建,大部分操作都是簡單的cavas繪製。

如果存在mattes,將會創建2~3個bitmap。bitmap在動畫加載到window時被創建,被window刪除時回收。所以不宜在RecyclerView中使用包涵mattes或者mask的動畫,否則會引起bitmap抖動。除了內存抖動,mattes和mask中必要的bitmap.eraseColor()和canvas.drawBitmap()也會降低動畫性能。對於簡單的動畫,在實際使用時性能不太明顯。

如果在列表中使用動畫,推薦使用緩存LottieAnimationView.setAnimation(String, CacheStrategy) 。

2.屬性動畫和Lottie動畫對比

以下性能對比是以K歌內單個禮物動畫效果

 

屬性動畫

lottie使用硬件加速

lottie未使用硬件加速

幀率

內容

CPU

Lottie動畫在未開啓硬件加速的情況下,幀率、內存,CPU都比屬性動畫差,開啓硬件加速後,性能差不多。

3、未開啓硬件加速,Lottie動畫大小幀率對比

0.12倍

1倍

主要耗時在draw方法,繪製區域越小,耗時越小

lottie優點

Lottie方法方案是由設計師出動畫,導出爲json,給前端播放。所以,使用Lottie方案的好處在於:

  • 動畫由設計使用專業的動畫製作工具Adobe After Effects來實現,使動畫實現更加方便,動畫效果也更好;
  • 前端可以方便的調用動畫,並對動畫進行控制,減少前端動畫工作量;
  • 設計製作動畫,前端展現動畫,專業人做專業事,分工合理;
  • 賣家秀即買家秀,還原程度百分之百;
  • 使用lottie方案,json文件大小會比gif文件小很多,性能也會更好。

lottie不足

使用Lottie方案有以下不足之處:

  • lottie-web文件本身仍然比較大,lottie.js大小爲513k,輕量版壓縮後也有144k,經過gzip後,大小爲39k。所以,需要注意lottie-web的加載。目前H5項目有離線包,PC項目也會上PWA,會對其進行緩存,保證加載速度。
  • lottie動畫其實可以理解爲svg動畫/canvas動畫,不能給已存在的html添加動畫效果;
  • 動畫json文件的導出,目前是將AE裏面的參數一一導出成json內容,如果設計師建了很多的圖層,可能仍然有json文件比較大(20kb)的問題。需要設計師遵循一定的規範。
  • 有很少量的AE動畫效果,lottie無法實現,有些是因爲性能問題,有些是沒有做。比如:描邊動畫等

 

文件

大小 gzip後
lottie.js 513k 92k
lottie.min.js 237k 60k
lottie_light.js (lottie_web輕量版,僅支持svg渲染) 345k 60k
lottie_lignt.min.js 144k 39k
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章