Android Lottie動畫的簡單使用

簡介

在Android中做動畫效果無非是以下幾種方法:

  1. 普通動畫
  2. 幀動畫
  3. 屬性動畫
  4. 通過改變LayoutParams佈局參數來實現動畫

現如今在Github上有一個比較火的動畫庫Lottie,Github上關於Lottie庫介紹大概是這樣的: 
Lottie是一個爲Android和iOS設備提供的一個開源框架,它能夠解析通過Adobe After Effects 軟件做出來的動畫,動畫文件通過Bodymovin導出json文件,然後由Lottie中的LottieAnimationView解析json渲染動畫。 
官方給出來的demo動畫效果如下:

這裏寫圖片描述

也就是說Lottie框架可以通過解析json文件來實現動畫效果,而無需開發寫太多的代碼去控制動畫。

Lottie Github地址:https://github.com/airbnb/lottie-android

Lottie的使用

1.下載Lottie庫

在你工程的build.gradle文件裏添加如下配置

  dependencies {  
  compile 'com.airbnb.android:lottie:2.6.0-beta19'
  }

2.簡單使用

Lottie支持API14以及以上,動畫簡單使用實例如下:

<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_imageAssetsFolder="images"
        app:lottie_autoPlay="true" />

如此,動畫就能跑起來了,解釋下一下屬性: 
1.lottie_fileName:在app/src/main/assets目錄下的動畫json文件名。 
2.lottie_loop:動畫是否循環播放,默認不循環播放。 
3.lottie_autoPlay:動畫是否自動播放,默認不自動播放。 
4.lottie_imageAssetsFolder:動畫所依賴的圖片目錄,在app/src/main/assets/目錄下的子目錄,該子目錄存放所有圖片。

你還可以在代碼中這樣使用:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");//在assets目錄下的動畫json文件名。
animationView.loop(true);//設置動畫循環播放
animationView.setImageAssetsFolder("images/");//assets目錄下的子目錄,存放動畫所需的圖片
animationView.playAnimation();//播放動畫

Lottie框架會在後臺自動解析json動畫配置文件,解析完後開始跑動畫。

你也可以這樣使用LottieAnimationView:

 LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
 ...
 Cancellable compositionCancellable = LottieComposition.Factory.fromJson(getResources(), jsonObject, (composition) -> {
     animationView.setComposition(composition);
     animationView.playAnimation();
 });

 // Cancel to stop asynchronous loading of composition
 // compositionCancellable.cancel();

3.控制動畫添加動畫監聽

animationView.addAnimatorUpdateListener((animation) -> {
    // Do something.動畫狀態監聽回調
});
animationView.playAnimation();//播放動畫
...
if (animationView.isAnimating()) {
    // Do something.動畫正在運行
}
...
//progress範圍0~1f,設置動畫進度
animationView.setProgress(0.5f);
...
// 自定義動畫時長,此處利用ValueAnimator值動畫來實時更新AnimationView的進度來達到控制動畫時長。
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
    .setDuration(500);
animator.addUpdateListener(animation -> {
    animationView.setProgress(animation.getAnimatedValue());
});
animator.start();//啓動動畫
...
animationView.cancelAnimation();//取消動畫

由以上代碼可知:你可以隨意控制動畫的時常,動畫的播放進度,動畫的各種狀態等。

Lottie動畫緩存策略

由於Lottie框架是解析json文件來做動畫效果的,解析json文件是I/O耗時操作,爲了提高動畫加載速度,在同一個動畫需要多處多次使用時,就有必要對解析json的結果進行緩存,以免每次都解析json文件耗時操作。所以Lottie框架提供了三種不同程度的動畫緩存策略:

  /**
   * Caching strategy for compositions that will be reused frequently.
   * Weak or Strong indicates the GC reference strength of the composition in the cache.
   */
  public enum CacheStrategy {
    None,
    Weak,
    Strong
  }
  • None 無緩存
  • Weak 弱引用緩存
  • Strong 強引用緩存

。你可以按照如下方法使用:

1.在LottieAnimationView控件的佈局中添加如下屬性:

app:lottie_cacheStrategy="weak"

默認情況下是無緩存的。

2.你也可以在代碼中如此使用:

animationView.setAnimation("hello_world.json", LottieAnimationView.CacheStrategy.Weak);

如果第二個參數未設置時,默認無緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章