Lottie是一个适用于Android、iOS、Web和React Native的移动库,用于解析使用Bodymovin导出为json的Adobe After Effects动画,并在移动设备上呈现它们!

先了解下lottie加载主体类:

  • LottieAnimationView 扩展ImageView,是加载Lottie动画的默认和最简单的方法。
  • LottieDrawable 与LottieAnimationView具有大多数相同的API,但您可以在任何所需的视图上使用它。
  • LottieComposition是动画的无状态模型重复。您可以使用LottieCompositionFactory创建一个并将其设置在LottieDrawable或LottieAnimationView上。

文章主要针对android使用lottie动画的各种加载情况;

一、使用准备

在项目的 build.gradle 文件添加依赖

dependencies {//修改$lottieVersion为你需要的版本号implementation 'com.airbnb.android:lottie:$lottieVersion'
}

最新的版本号可以到官网或者github查询,lottie仅支持api16及以上。

http://airbnb.io/lottie/#/android

https://github.com/airbnb/lottie-android

注意:要想使用lottie2.8.0及以上版本需要将现有项目迁移到androidx项目(google迁移官方文档)(迁移会出现的问题不在今天讲解中,请自行百度或者google)

二、加载方式(官网提示:以及加载方式)

Lottie支持API 16及更高版本。

Lottie动画可以从以下位置加载动画:

  • 一个json动画src/main/res/raw
  • 一个json文件src/main/assets
  • 一个zip文件src/main/assets。有关详细信息,请参阅图像文档。
  • json或zip文件的URL。
  • 一个json字符串。源可以来自任何东西,包括您自己的网络堆栈。
  • 用于json文件或zip文件的InputStream。

1、在xml中直接加载动画的几种方式

//加载assets中json和img文件配合生成的动画
<com.airbnb.lottie.LottieAnimationViewandroid:layout_width="300dp"android:layout_height="300dp"app:lottie_autoPlay="true"app:lottie_fileName="siam.json"app:lottie_imageAssetsFolder="siamCat/"app:lottie_loop="true" />
//加载assets中的单一json动画文件
<com.airbnb.lottie.LottieAnimationViewandroid:layout_width="300dp"android:layout_height="300dp"app:lottie_autoPlay="true"app:lottie_fileName="bird2.json"app:lottie_loop="true" />
//加载raw中的json动画<com.airbnb.lottie.LottieAnimationViewandroid:layout_width="300dp"android:layout_height="300dp"app:lottie_autoPlay="true"app:lottie_loop="true"app:lottie_rawRes="@raw/bird1" />

2、动态加载assets文件json动画

  //有使用imgs图就添加下面代码,没有就直接设置setAnimation("chinese.json")即可lottieAnimationView01.setImageAssetsFolder("chineseImages/");lottieAnimationView01.setAnimation("chinese.json");
// lottieAnimationView01.loop(true);//循环播放动画,已经废弃,但是还可以使用,建议使用下面的两行代码lottieAnimationView01.setRepeatMode(LottieDrawable.REVERSE);//设置播放模式lottieAnimationView01.setRepeatCount(LottieDrawable.INFINITE);//设置重复次数lottieAnimationView01.playAnimation();

3、 通过url直接加载

 lottieAnimationView.setAnimationFromUrl("https://cqz-1256838880.cos.ap-shanghai.myqcloud.com/bird1.json");lottieAnimationView.setRepeatMode(LottieDrawable.REVERSE);lottieAnimationView.setRepeatCount(LottieDrawable.INFINITE);lottieAnimationView.playAnimation();

4、加载raw中的动画

     animation_view03.setAnimation(R.raw.bird1);animation_view03.setRepeatMode(LottieDrawable.REVERSE);animation_view03.setRepeatCount(LottieDrawable.INFINITE);animation_view03.playAnimation();

5、加载手机中的json文件

    String LOCALPATH = Environment.getExternalStorageDirectory().getAbsolutePath();try {animation_view04.setAnimationFromJson((readExternal(LOCALPATH + "/asnow/bird1.json")));animation_view04.setRepeatMode(LottieDrawable.REVERSE);animation_view04.setRepeatCount(LottieDrawable.INFINITE);animation_view04.playAnimation();} catch (Exception e) {e.printStackTrace();}/*** 从sd card文件中读取数据** @param filename 文件的绝对路径 如:/storage/emulated/0/asnow/bird1.json* @return* @throws IOException*/public String readExternal(String filename) throws IOException {StringBuilder sb = new StringBuilder();if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//打开文件输入流FileInputStream inputStream = new FileInputStream(filename);byte[] buffer = new byte[1024];int len = inputStream.read(buffer);//读取文件内容while (len > 0) {sb.append(new String(buffer, 0, len));//继续将数据放到buffer中len = inputStream.read(buffer);}//关闭输入流inputStream.close();}return sb.toString();}

6、加载手机中的json文件和imgs配合的动画

  /*** 加载手机中的file文件(带图片)** @param jsonFile  json文件绝对路径 如:/storage/emulated/0/asnow/siam.json* @param imagesDir json文件引用的image文件的目录 如:/storage/emulated/0/asnow/siamCat/*/private void showSdcardLottieEffects(String jsonFile, final String imagesDir) {BufferedReader bufferedReader = null;try {bufferedReader = new BufferedReader(new FileReader(jsonFile));String content = null;StringBuilder stringBuilder = new StringBuilder();while ((content = bufferedReader.readLine()) != null) {stringBuilder.append(content);}JSONObject jsonObject = new JSONObject(stringBuilder.toString());
//            final String absolutePath = imagesDir.getAbsolutePath();        //提供一个代理接口从 SD 卡读取 images 下的图片animation_view05.setImageAssetDelegate(new ImageAssetDelegate() {@Overridepublic Bitmap fetchBitmap(LottieImageAsset asset) {Bitmap bitmap = null;FileInputStream fileInputStream = null;try {fileInputStream = new FileInputStream(imagesDir + asset.getFileName());bitmap = BitmapFactory.decodeStream(fileInputStream);} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {if (bitmap == null) {bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ALPHA_8);}if (fileInputStream != null) {fileInputStream.close();}} catch (IOException e) {}}return bitmap;}});animation_view05.setRepeatMode(LottieDrawable.REVERSE);animation_view05.setRepeatCount(LottieDrawable.INFINITE);LottieComposition.Factory.fromJsonString(String.valueOf(jsonObject), new OnCompositionLoadedListener() {@Overridepublic void onCompositionLoaded(@Nullable LottieComposition composition) {if (composition == null) {return;}animation_view05.cancelAnimation();animation_view05.setProgress(0);animation_view05.setComposition(composition);animation_view05.playAnimation();}});} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}

这里需要注意下图:1和2处的命名以及后缀要一样,否则就会出现不能找到文件

lottie的常用几种加载动画的方式都给到了,可以轻松实现完美动画展示了,至于文档提到的可以加载zip文件,我没找到加载的方法;

最后再提下:lottie动画支持暂停、播放动画,LottieAnimationView是ImageView的扩展,所以其对应的属性和方法都可以使用,具体的去看下LottieAnimationView源码,可以看到更多的功能;

Demo 注意项目是androidx项目

android Lottie详细使用相关推荐

  1. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux

    安装 Android Studio详细教程 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jdk1.8.0_25 android-st ...

  2. android lottie字体json,lottie-android

    build.gradlefile:dependencies { compile 'com.airbnb.android:lottie:1.0.1' } lottie 支持 Jellybean (API ...

  3. android lottie字体json,android:Lottie--让Android动画更优雅

    一. Lottie简介 Lottie是什么? Lottie是Airbnb开源的一个支持 Android.iOS 以及 ReactNative,利用json文件的方式快速实现动画效果的库. Lottie ...

  4. android 酷狗demo_酷狗音乐Android客户端详细使用评测

    曾经现在酷狗音乐一直是PC机上必装的音乐播放软件,手机音乐播放器哪个好用呢,酷狗音乐Android客户端也经过几个版本更新,版酷狗音乐的功能,界面都趋于完美.下面来看看酷狗音乐Android客户端详细 ...

  5. android lottie api,Lottie Android 初探

    Lottie Android 初探 Lottie是一个支持Android.iOS.React Native,并由 Adobe After Effects制作aep格式的动画,然后经由bodymovin ...

  6. Android架构详细讲解与C/C++开发支持原理

    Android架构详细讲解与C/C++开发支持原理 在Android 在NDK r5使用C/C++进行开发.(以前,Android 对C/C++开发的支持仅限于用C/C++开发动态链接库,然后在Jav ...

  7. lottie动画android,lottie——让设计师来写动画

    首先来思考一下如何实现下面的动画 Android的动画有很多种: Frame Animation(逐帧动画): 主要用于播放一帧帧准备好的图片,类似GIF图片. Tween Animation(补间动 ...

  8. Android lottie java.lang.IllegalStateException: Missing values for keyframe

    使用Lottie动画的时候,运行发现了此报错,版本为2.4.0,在经过几番的测试后,更改了资源文件和xml里面的配置也不大行. tips:一定要在xml里面配置资源文件,当你把资源文件raw里面的时候 ...

  9. android系统的iphone,iPhone上安装Android系统详细步骤。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在iphone安装android系统的详细步骤 首先,准备好iphone的多点触屏和wlan固件.因为法律的缘故,我们不能分享这些文件,你可以去ipsw文 ...

最新文章

  1. 微软OCR两层优化提升自然场景下的文字识别精度(模式识别新研究)
  2. HDU 1253 胜利大逃亡 题解
  3. ssl2331OJ1373-鱼塘钓鱼 之1【纯贪心】
  4. Java中Lambda表达式与方法引用和构造器引用
  5. 爬虫python能做游戏吗_一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!...
  6. Xcode6 手动建empty application
  7. 计算机使用维护教程,《计算机使用与维护教程》教学大纲.doc
  8. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用
  9. python运维开发项目_GitHub上值得推荐的8个python 项目
  10. kernel oops_Java中的OOPS概念– OOPS概念示例
  11. hashmap 存取原理图_HashMap原理(二) 扩容机制及存取原理
  12. 《经济学人》15个栏目版块介绍,快速了解杂志!
  13. eplan 电箱布局_Eplan 的从头到尾完成3D布局步骤说明
  14. C语言——求2-1000之间的素数,每行打印8个
  15. 为什么需要等待2MSL
  16. win7 加密oracle修正,win7 远程连接服务器出现身份验证错误,又找不到加密Oracle修正...
  17. 纸张的规格:A3.A4.A5.A6纸的尺寸大小
  18. python实现去除图片水印
  19. iOS设备指纹的前世今生
  20. 【COGS2652】秘术「天文密葬法」(长链剖分,分数规划)

热门文章

  1. PAT(乙级)2020年冬季考试真题解析
  2. CVPR 2019 目标检测论文汇总
  3. 热带雨林的昆虫繁殖题解
  4. Java == equals() hashCoed()的区别
  5. android 项目大全,总有你所需的
  6. python 使用钉钉机器人发送消息至钉钉
  7. C语言三个数比较大小排序
  8. JVM篇·垃圾收集器与内存分配策略
  9. 人脸检测:史上最详细人脸检测libfacedetection讲解-网络详解--第二节
  10. P1071 潜伏者(C++)