1. 导依赖
compile 'com.airbnb.android:lottie:3.3.1'
2. json文件
把ui给的json文件放到需要他的module的assets文件下(src/main/assets)
3. 控件
在需要界面的xml里写控件<com.airbnb.lottie.LottieAnimationView/>
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:lottie_autoPlay="true"
app:lottie_fileName="record.json"
app:lottie_loop="true"
app:lottie_imageAssetsFolder="images" />
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动画配置文件,解析完后开始跑动画。
4. 控制动画添加动画监听
可以随意控制动画的时常,动画的播放进度,动画的各种状态等。
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//强引用缓存
}
默认情况下是无缓存的。
使用:
- 在LottieAnimationView控件的布局中添加如下属性:
app:lottie_cacheStrategy="weak"
- 代码中:(如果第二个参数未设置时,默认无缓存。)
animationView.setAnimation("hello_world.json", LottieAnimationView.CacheStrategy.Weak);
网友评论