Lottie简介

Lottie是一个iOS,Android和React Native库,可以实时渲染After Effects动画,允许应用程序像使用静态图像一样轻松使用动画。

为什么使用Lottie?

灵活的After Effects功能

Lottie目前支持实体,形状图层,蒙版,alpha遮罩,修剪路径和虚线图案。Lottie将定期添加新功能。

以更让人喜欢的方式操纵动画

Lottie动画可以前进、后退,并且最重要的是可以对动画进行编程以响应任何交互。

动画文件小

在应用中捆绑矢量动画,而不必担心多个维度或大文件大小。或者可以通过从JSON API加载动画文件来完全将动画文件与应用程序代码分离。

Android引入Lottie

使用准备

Lottie支持多平台,使用同一个JSON动画文件,可在不同平台实现相同的效果。Android 通过Airbnb的开源项目lottie-android实现,最低支持 API 16;

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

dependencies {

implementation 'com.airbnb.android:lottie:$lottieVersion'

}

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

核心类

LottieAnimationView继承ImageView,是加载Lottie动画的默认和最简单的方法

LottieDrawable与LottieAnimationView具有大多数相同的API,但可以在任何所需View上使用它。

LottieComposition动画json数据的对象模型,通过LottieComposition,实现对动画的分解和序列化。

加载动画

Lottie动画可以从以下几处加载:

存放在src/main/res/raw下的json动画文件

存放在src/main/assets下的json文件

存放在src/main/assets下的zip文件

通过一个url获取到的json或者zip文件

一个json字符串,可以来自于任何地方,包括网络

一个输出json或者zip文件的InputStream

XML方式加载动画

最简单的使用方法是使用LottieAnimationView:

建议使用lottie_rawRes,因为可以通过R使用对动画的静态引用,而不是仅使用字符串名称。

From res/raw (lottie_rawRes) or assets/ (lottie_fileName)

android:id="@+id/animation_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

app:lottie_rawRes="@raw/hello_world"

// or

app:lottie_fileName="hello_world.json"

// Loop indefinitely

app:lottie_loop="true"

// Start playing as soon as the animation is loaded

app:lottie_autoPlay="true" />

编程方式加载动画

可以查看LottieAnimationView类的API进行编程方式播放动画,具体代码不再赘述

Lottie动画还支持更多特性:动画监听器、动画循环、缩放等此处不再赘述,有需要请参考:http://airbnb.io/lottie/#/android

踩坑(遇到的问题)

动画文件版本问题

UI首次给我物料时立即放到工程里试了一下,发现报错如下:

java.lang.IllegalStateException: Missing values for keyframe.

at com.airbnb.lottie.animation.keyframe.FloatKeyframeAnimation.getValue(FloatKeyframeAnimation.java:16)

at com.airbnb.lottie.animation.keyframe.FloatKeyframeAnimation.getValue(FloatKeyframeAnimation.java:8)

at com.airbnb.lottie.animation.keyframe.BaseKeyframeAnimation.getValue(BaseKeyframeAnimation.java:125)

at com.airbnb.lottie.animation.keyframe.TransformKeyframeAnimation.getMatrix(TransformKeyframeAnimation.java:113)

经过搜索发现了一个官方的issues:https://github.com/airbnb/lottie-android/issues/1177

有一个哥们回复如下:Lottie 3.0和Bodymovin 5.5有一些重要的json优化,可以节省json大小和解析速度的1/3。 但是,必须在3.0以上生效,否则就在bodymovin设置中启用“导出为旧格式”(Bodymovin为AE导出动画的插件)。

看了一下我们的版本果然为3.0一下(2.5.6),于是跟UI说明,重新导出了一份动画物料,问题解决。

zip动画文件多次播放崩溃

UI给我的是一个zip文件,由于Lottie也支持zip所以就直接把zip文件放到assets目录下适使用,第一次进入效果很好,但是退出Activity再次进来就会报错,错误信息如下:

java.lang.IllegalStateException: You must set an images folder before loading an image. Set it with LottieComposition#setImagesFolder or LottieDrawable#setImagesFolder

at com.airbnb.lottie.manager.ImageAssetManager.bitmapForId(ImageAssetManager.java:107)

at com.airbnb.lottie.LottieDrawable.getImageAsset(LottieDrawable.java:839)

at com.airbnb.lottie.model.layer.ImageLayer.getBitmap(ImageLayer.java:68)

at com.airbnb.lottie.model.layer.ImageLayer.drawLayer(ImageLayer.java:32)

at com.airbnb.lottie.model.layer.BaseLayer.draw(BaseLayer.java:201)

at com.airbnb.lottie.model.layer.CompositionLayer.drawLayer(CompositionLayer.java:100)

at com.airbnb.lottie.model.layer.BaseLayer.draw(BaseLayer.java:201)

at com.airbnb.lottie.LottieDrawable.draw(LottieDrawable.java:319)

很幸运的是这个bug我也找到了官方的issueshttps://github.com/airbnb/lottie-android/issues/1009,有一个committer回复在新版本已经修复了这个bug,修复到了3.0版本,看代码提交记录大概是bitmap回收的bug。由于我们的版本是2.5.6因此存在此bug,但是升级Lottie的成本比较大,UI又倾向于使用Lottie,这个问题很难办。抱着试一试的态度把zip解压了,放到assets目录下居然没有问题了。!

android静态动画,Android Lottie动画实战踩坑相关推荐

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

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

  2. Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏

    Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏 报错日志 排查过程 泄漏原因 解决方案 最近维护一个项目,一个内存泄漏的的原因查了很久,这里记录 ...

  3. Android获取不到运动步数(踩坑)

    Android获取不到运动步数(踩坑) 获取运动步数 某些手机获取不到步数 获取运动步数 使用SensorManager,也就是手机内置的传感器获取运动步数,通过该方法可获取到当前运动步数.开机后总运 ...

  4. 【问题解决】Android JDK版本不匹配导致崩溃踩坑记录

    [问题解决]Android JDK版本不匹配导致崩溃踩坑记录 部分机型反馈崩溃问题 谷歌回复与解决方案 Android打包脱糖操作 对比与排查 总结 前几天同事遇到一个非常诡异的报错,紧急处理后,趁着 ...

  5. 微信H5支付实战踩坑

    准备 需求 需求就是最简单的对接微信H5支付接口 方案心路历程 之前直接用http对接过,不过这次想用官方提供的SDK 一方面SDK提供的接口比较完整,二方面感觉应该使用别人辛苦写下来的封装 百度了一 ...

  6. 【Android -- 动画】Lottie 动画的基本使用

    一.简介 Lottie 是 Airbnb 开源的一个面向 iOS.Android.React Native 的动画库,能分析 Adobe After Effects 导出的动画,并且能让原生 App ...

  7. Android安卓集成融云推送踩坑

    此文档单单接入推送,暂时没有用IM或其他 如果您觉得可以帮助到您,麻烦帮我点个赞. -------------------------------- 写在前面,为什么要用这个,我并不想,实际接入过程中 ...

  8. zbar android解码错误,Android原生编解码接口 MediaCodec 之——踩坑

    关键帧 MediaCodec 有两种方式触发输出关键帧,一是由配置时设置的 KEY_FRAME_RATE和KEY_I_FRAME_INTERVAL参数自动触发,二是运行过程当中经过 setParame ...

  9. 【Unity游戏开发】Android中如何集成Unity3D项目——入门级踩坑

    最近的学习之路真的是波折,先是想学Kotlin,结果赶上了算法比赛,恶补了几天算法,然后回归Kotlin,这周又需要调研一下Unity3D,需要把Unity项目嵌入到我们的Android项目中. 今天 ...

  10. Android集成阿里云旺即时通讯踩坑历程

    下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...

最新文章

  1. SCOM警报通知新特性:即时消息通知
  2. ArrayList 解释
  3. 从新冠疫情出发,漫谈 Gossip 协议
  4. 可穿戴设备对企业的积极意义
  5. 01:操作系统(centos,redhat):性能监控和网络命令
  6. 将request.getParameterMap()转换成可操作的普通Map
  7. PyTorch的学习笔记
  8. Koa v2.x 中文文档 上下文(Context)
  9. 图层重命名快捷键_玩转CAD快捷键(大全),一篇文章就够了
  10. 【中山市选2009】【BZOJ2463】谁能赢呢?
  11. 水凝胶 静电纺丝_离子液体/水和静电纺丝条件对聚偏氟乙烯纳米纤维晶体结构的影响...
  12. js获取ck_JS获取CkEditor在线编辑的内容
  13. 中英文计算机核心期刊目录
  14. linux把终端嵌入桌面,在你的Ubuntu Linux桌面上嵌入终端窗口
  15. linux num_fds文件描述符数量限制 too many openfiles 错误
  16. MarkDown桌面版使用下载+安装+使用教程(包括全套的使用语法,欢迎大家查看)
  17. 汇佳学校|多元艺术+探究式思维 领航国际艺术教育新趋势
  18. 利用Sobel算子,求梯度图像
  19. xshell 的快捷键 复制是 Ctrl+Insert,粘贴是 ShIft+Insert。刚才发现可以设置成 ctrl+C 和 ctrl+V
  20. 【matlab系列汇总】matlab学习实战快速进阶之路(持续更新)

热门文章

  1. mysql表结构导出word_利用word宏功能一键导出数据库表结构
  2. 有源滤波器与无源滤波器的区别
  3. JavaScript学习手册三:JS运算符
  4. ios模拟器装ipa包_给iOS 模拟器“安装”app文件
  5. php 程序性能分析工具,php的性能分析工具:xhprof
  6. 小米便签开源项目本地环境搭建与分析
  7. 加密解密工具 之 希尔密码
  8. python处理实时获取的数据
  9. 《上海悠悠接口自动化平台》-5.测试计划与定时任务
  10. github加速方法