一、简介

Lottie 是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,能分析 Adobe After Effects 导出的动画,并且能让原生 App 像使用静态素材一样使用这些动画,完美实现动画效果。

现在使用各平台的 native 代码实现一套复杂的动画是一件很困难并且耗时的事,我们需要为不同尺寸的屏幕加载不同的素材资源,还需要写大量难维护的代码,而Lottie可以做到同一个动画文件在不同平台上实现相同的效果,极大减少开发时间,实现不同的动画,只需要设置不同的动画文件即可,极大减少开发和维护成本。

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

Lottie 官网:https://airbnb.design/lottie/

为什么使用Lottie

  1. 跨平台只有制作一套json动画文件便可以跨平台在 Android  ios ReactNeative上使用,lottie库负责解析json文件并播放动画

  2. 可以支持网络下载json文件,本地播放,实时更新动画资源。

  3. 运行时效率上仅仅用Canvas去draw而已,流畅度非常棒,所以哪怕在Listview里去大量显示,内存占用和绘图效率都远远高于帧动画。

  4. 实现效果可以按设计出的100%还原到产品中

  5. 开发周期大大减少

使用Lottie实现的效果

Android端使用方法

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

dependencies {implementation 'com.airbnb.android:lottie:$lottieVersion'
}

2. 添加 Adobe After Effects 导出的动画文件

Lottie默认读取Assets中的文件,我们需要把设计导出的动画文件.json 保存在app/src/main/assets文件里。

3. 使用Lottie

  1. 直接布局加载*.json文件的方法:
  <com.airbnb.lottie.LottieAnimationViewandroid:id="@+id/animation_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"app:lottie_fileName="Logo/LogoSmall.json"app:lottie_loop="true" />

lottie_fileName表示本地Assets文件中存的json动画文件

lottie_loop表示动画循环执行

2. 代码加载动画方法

<com.airbnb.lottie.LottieAnimationViewandroid: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" />

lottie_autoPlay表示设置是否自动启动播放

        //声明控件lottieAnimationView = findViewById(R.id.animation_view);//这个可有可无,如果不涉及本地图片做动画可忽略lottieAnimationView.setImageAssetsFolder("images");//设置动画文件lottieAnimationView.setAnimation(".json");//是否循环执行lottieAnimationView.loop(true);//执行动画lottieAnimationView.playAnimation();
  1. 加载网络.json文件
private void loadUrl(String url) {Request request = new Request.Builder().url(url).build();OkHttpClient client = new OkHttpClient();client.newCall(request).enqueue(new Callback() {@Override public void onFailure(Call call, IOException e) {}@Override public void onResponse(Call call, Response response) throws IOException {try {JSONObject json = new JSONObject(response.body().string());LottieComposition.Factory.fromJson(getResources(), json, new OnCompositionLoadedListener() {@Overridepublic void onCompositionLoaded(LottieComposition composition) {lottieAnimationView.setComposition(composition);lottieAnimationView.playAnimation();}});} catch (JSONException e) {e.printStackTrace();}}});}

常用方法

  • animationView.isAnimating();  动画是否在播放
  • animationView.playAnimation();    播放动画
  • animationView.pauseAnimation();   暂停动画
  • animationView.cancelAnimation();  取消动画
  • animationView.setProgress(progress);  设置进度,progress范围0~1
  • animationView.setMinAndMaxProgress(min,max);  设置播放范围,0~1
  • 监听动画进度
  • 设置动画硬件加速
  • 缓存动画
  • Lottie本身在 Android 平台已经做了适配工作,而且适配原理很简单,解析时,从 读取宽高之后会再乘以手机的密度。再在使用的时候判断适配后的宽高是否超过屏幕的宽高,如果超过则再进行缩放。以此保障 Lottie 在 Android 平台的显示效果

接入遇到的坑

  1. 使用Lottie超过2.8.0版本必须兼容androidx,api28

  2. 使用Lottie2.0系列的必须通知设计导出json文件的时候兼容旧版本,如下图:

  3. 内存溢出情况原因分析:如果设计直接从PS里面做出的动画在AE里面导出,就会出现很多副本图片,我们加载json文件就会像帧动画一样循环那些图片,对于配置低的手机当我们几个动画同时循环播放的时候就会形成多张图片在那轮询造成内存溢出。

  4. 机型适配问题需要注意:对于需要落到固定位置的动画,切记一定要让设计标出动画的尺寸

具体设计师如何生成json文件可以参考官方文档。

Lottie简单使用相关推荐

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

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

  2. Android Notes|BottomNavigationView 爱上 Lottie

    鸡老大说:大丈夫岂能久居人下. 前言 好容易解决个问题,感觉记录一波. 当日事当日毕,践行鸡老大,点滴积累,万一某天优秀了呢? 以前大部分项目底部导航栏关于图片部分的实现,要么两套图 selector ...

  3. Android—逐帧、补间、属性动画

    1.Tween Animation 补间动画 这类动画比较简单,一般就是平移.缩放.旋转.透明度,或者其组合,可以用代码或者xml文件的形式,推荐使用xml文件形式,因为可以复用. 四个动画效果实现类 ...

  4. Android动画大合集

      android中的动画实现方式繁多,在项目中也经常用到动画,网上有很多人也都进行了一些总结,但是感觉还是零零散散,自己总结一下才能加深印象,以后有时间了,也可以从各个分类里进一步去补充完善. 如果 ...

  5. Lottie: 让动画实现更简单

    自开始工作后,我就养成了一个习惯,那就是每天闲来无事去 Github 中浏览一些比较热门的开源项目,就在最近我发现了一个比较niubility的开源动画库项目 ----Lottie. 正式开始之前先简 ...

  6. Lottie:简单上手高性能的动画方案(附精美Android-Lottie-Demo)

    Lottie官方介绍 Lottie是支持Android,iOS,Web和Windows多个平台的库,并利用Bodymovin插件把Adobe After Effects(AE)动画解析成json文件, ...

  7. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

    原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...

  8. 程序员也想改 Lottie 动画?是的!

    一.前言 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案,用过都说好.完全解耦开发人员和设计师,让设计师设计的动画,在程序中无缝还原,真是一旦拿 ...

  9. android jason动画,Android 动画之Lottie动画使用

    Android 动画之Lottie动画使用 一:简介 Lottie是Airbnb开源的一套跨平台的完整解决方案,设计师只需要使用After Effects(简称AE)设计动画之后,使用Lottic提供 ...

最新文章

  1. 【spring】使用spring的环境配置及从官网获得配置文件所用代码的方法
  2. 1006:A+B问题
  3. activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试
  4. 服务器如何返回429状态,Instagram远程服务器返回一个错误:(429)UNKNOWN STATUS CODE...
  5. 1001. A+B Format
  6. 【万里征程——Windows App开发】使用华丽丽的字体
  7. 支持全文搜索的桌面搜索工具
  8. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(五)——无源与有源电流镜
  9. 2021年中国手游行业发展现状及未来发展趋势分析[图]
  10. 用Python生成人人贷借款理由词云图
  11. [编译链接装载系列]之聊聊目标文件与ELF格式
  12. 吃货联盟订餐系统项目
  13. 【BZOJ2152】聪聪可可 树分治
  14. 垃圾回收的主要区域是堆,那方法区会回收吗?
  15. 八种基本数据类型(一)
  16. 电话号码查询系统(链式结构)
  17. Rewrite和RewriteRule规则,http强转https的配置总结
  18. 监控之美——监控之美-监控系统选型分析及误区探讨
  19. 如何有效记账 记账有哪些优点
  20. VS2019创建和使用静态库(.lib文件)

热门文章

  1. 最新大学生就业报告出炉!这7个专业最好找工作
  2. 计算机一级教学视频回信,第6章_因特网基础与简单应用--全国计算机等级考试一级MSOFFICE2010版.ppt...
  3. 计算机在线试卷及答案,计算机应用基础试卷及答案.pdf
  4. 多组两两比较用什么检验方法_多组均数两两比较时,若不用q检验而用t检验,则:...
  5. 利用vmware虚拟机实验从SUSE SLES12sp3 升级到SLES15sp1的过程
  6. YOLO v4在jetson nano的安装及测试
  7. 用html制作一个中国高铁网页,基于jQuery实现在线选座之高铁版
  8. iOS 15之后, 微信支持双开甚至多开了?
  9. (OK) 华为全网通 honor 5x - KIW-AL10 安装 自己编译的 LineageOS 14.1 - 成功
  10. python 从一道作业题到制作一个图形界面的“诈金花”游戏