Airbnb最近開源了一個名叫Lottie的動畫庫,它能夠同時支持iOS,Android與ReactNative的開發(fā).此消息一出,還在苦于探索自定義控件各種炫酷特效的我,興奮地就像發(fā)現(xiàn)的新大陸一般.可以說,Lottie的出現(xiàn),將極大地解放Android/iOS工程師于無盡的編寫原生自定義動畫的工作中.當我們的項目中用GIF實現(xiàn)一些復雜的視覺效果的時候,會遇到許多的問題.比如,GIF的文件過于龐大,并且對于不同分辨率設備的適配存在不便,并且Gif格式的色深問題是一個死穴.
比如下面這個動畫效果

原始工程導出的json文件:http://cdn.trojx.me/blog_raw/lottie_data_origin.json
如下圖所示,通過安裝在AE上的一款名叫bodymovin的插件,能夠將AE中的動畫工程文件轉換成通用的json格式描述文件,bodymovin插件本身是用于在網(wǎng)頁上呈現(xiàn)各種AE效果的一個開源庫,lottie做的事情就是實現(xiàn)了一個能夠在不同移動端平臺上呈現(xiàn)AE動畫的方式.從而達到動畫文件的一次繪制、一次轉換、隨處可用的效果.當然,就如java一次編譯,隨處運行一樣,lottie本身這個動畫播放庫并不是跨平臺的.

終于說到主角了,然而關于它的使用方式卻是相對簡單的.Lottie的引入與使用就如其他庫一樣,這里以Android平臺的使用為例.
把導出的json動畫文件添加到assets目錄下:

在項目的build.gradle文件中加入:
dependencies {    compile 'com.airbnb.android:lottie:1.0.1'}Lottie支持Jellybean (API 16)及以上的系統(tǒng),最簡單的使用方式是直接在布局文件中添加:| <com.airbnb.lottie.LottieAnimationView android:id="@+id/animation_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:lottie_fileName="hello-world.json" app:lottie_loop="true" app:lottie_autoPlay="true" /> | 
app/src/main/assets路徑下的json文件中導入動畫數(shù)據(jù):| 123 | LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);animationView.setAnimation("hello-world.json");animationView.loop(true); | 
public class MainActivity extends AppCompatActivity {    @Override    PRotected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);        animationView.setAnimation("EmptyState.json");        animationView.loop(false);        Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animator) {            }            @Override            public void onAnimationEnd(Animator animator) {                startActivity(new Intent(MainActivity.this,LoginActivity.class));            }            @Override            public void onAnimationCancel(Animator animator) {                startActivity(new Intent(MainActivity.this,LoginActivity.class));            }            @Override            public void onAnimationRepeat(Animator animator) {            }        };        animationView.addAnimatorListener(animatorListener);        animationView.playAnimation();    }}補充:
想看生成json文件的看這里:http://www.trojx.me/2017/02/06/android-lottie-library/
后續(xù)補上demo
新聞熱點
疑難解答