Lottie简介
Lottie是一个适用于Android,iOS,Web和Windows的库,它可以使用Bodymovin解析以json格式导出的Adobe After Effects动画,并在移动设备和Web上原生渲染它们!
在Android中应用
Android通过Airbnb的开源项目lottie-android实现,最低支持 API 16;
查看Android中lottie-android版本号:http://airbnb.io/lottie/#/android?id=sample-app或者https://github.com/airbnb/lottie-android/releases
应用
1,Model的build.gradle引入依赖
implementation 'com.airbnb.android:lottie:2.2.0'
2,静态使用
2.1,在XML补给文件中加入
<com.airbnb.lottie.LottieAnimationView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_fileName="data.json"
app:lottie_loop="true"
app:lottie_autoPlay="true"/>
- lottie_repeatCount 动画重复次数
- lottie_repeatMode 动画重复模式
- lottie_scale 放大倍数
- lottie_fileName 调用的assets下的Json文件名
- lottie_loop 是否开启循环动画
- lottie_autoPlay 是否开启自动播放
2.2,在项目的assets(没有就新建此目录)下放入UI或者自己制作或者Lottie官网下载的JSON文件;运行下项目就可以看到效果了;这是最简单的使用了;
3,动态使用
在代码中使用
LottieAnimationView animation_view5= findViewById(R.id.animation_view5);
//设置动画JSON文件
animation_view5.setAnimation(R.raw.roatating_light);
//设置循环播放
animation_view5.loop(true);
//播放动画
animation_view5.playAnimation();
4,监听
4.1,整个生命周期的监听
animation_view5.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.d(TAG, "开始");
}
@Override
public void onAnimationEnd(Animator animation) {
Log.d(TAG, "结束");
}
@Override
public void onAnimationCancel(Animator animation) {
Log.d(TAG, "取消");
}
@Override
public void onAnimationRepeat(Animator animation) {
Log.d(TAG, "重复");
}
});
4.2,过程监听
animation_view5.addAnimatorUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
}
});
5,Lottie可以从以下位置加载动画:
src/main/res/raw 中的json动画。
src/main/assets 中的json文件。
src/main/assets中的zip文件。
src/main/assets中的dotLottie文件。
网络上的json或zip文件的地址。
json字符串。来源可以来自任何地方;
JSON文件或zip文件的InputStream流。
6,常用的API介绍
判断是否动画正在运行中 isAnimating()
设置动画的进度值(float值) setProgress();
监听动画进度 addAnimatorUpdateListener
开始动画 playAnimation()
动态设置json文件 setComposition()
取消动画 cancelAnimation()
暂停动画 pauseAnimation()
7,核心类
LottieAnimationView 继承ImageView,是加载Lottie动画的默认和最简单方法;
LottieDrawable 与LottieAnimationView具有大多数相似的API,可以在任何View上使用它;
LottieComposition动画json数据的对象模型,通过LottieCompostion实现对动画的分解;
异常:
java.lang.IllegalStateException: Missing values for keyframe.
解决办法:
build.gradle引入的依赖版本号要大于3.0.0,目前最新的版本:3.5.0;由于gradle中使用的lottie库版本过低的原因,Lottie 3.0和Bodymovin 5.5有一些重要的json优化,可以节省json大小和解析速度的1/3。 但是,必须在3.0以上生效,否则就在bodymovin设置中启用“导出为旧格式”(Bodymovin为AE导出动画的插件)所以我们目前在官网资源库中下载的lottie动画资源大部分是需要Lottie 3.0以上才可以使用的,所以需要将自己依赖的Lottie动画库版本进行升级;
官方文档
Lottie官网:https://lottiefiles.com/
Android Lottie框架官网:http://airbnb.io/lottie/#/
开源框架Github:https://github.com/airbnb/lottie-android
JSON转 dotLottie :https://dotlottie.io/resources/json-to-dotLottie/