Android 动画库对比(Lottie 和 SVGA)

2023-05-16

Lottie 和 SVGA 对比

友情链接: SVGA 源码解析

现有方案

  • 方案一: Gif / 帧动画
  • 方案二: Native动画(属性动画/补间动画)
  • 方案三:动画库
    • Lottie
    • SVGA
    • Keyframes
    • Squall

Gif

  • 1.思路:一般Gif或者帧动画 的性能差是由于图过多,每秒种几十帧,每一帧都是一张图。一个小动画往往需要几十张图。如果变成资源下载,资源包体积难以控制。
  • 2.Gif / 帧动画缺点:

    • 资源文件包比较大
    • 效果不是很好(只支持8位颜色)
  • 3.使用场景:以上来看gif & 序列帧 只适合做小的动画,例如下拉刷新,小的动态logo,或者直播中的小礼物场景。

原生 Native 动画

  • 1.思路:Native 动画实则是属性动画或者补间动画。性能相比较gif而言性能比较好,但是有大量动画的需求时,往往生产力是不够的,一开始手动码动画,一个动画最多时写了3000多行code。项目最多的动画达4000行。生产力成了瓶颈。 总结:
  • 2.Native 动画优缺点:
    • 开发成本高
    • 必须发版
    • 不能完全100%还原复杂动画,调参数比较繁琐
    • 图片资源大,影响apk包大小
  • 3.场景: 适合转场,固定的场景。不适合大量、快速迭代的需求。

动画库对比

  • 动画库的流程

  • 一套引擎库,三端共用

  • 一套协议,三端各自实现
  • 对比
动画库LottieSVGAKeyframesSquallSpine
支持平台Android/iOS/WebAndroid/iOS/WebAndroid/iOSiOSAndroid/iOS/Web
设计工具支持After EffectsAE & FlashAEAEAE
功能边界所有部分矢量图矢量图大部分
导出工具插件插件脚本插件单独的设计工具
设计成本需要命名规范需要脚本插件单独的设计工具
资源包大小zip2.6M767k  2M
收费NNNYY
官网地址地址地址地址
  • 以上基本排除了Keyframes 和 Squall。

    Dragonbones / Spine 动画库

     

  • 这两个可能市面上见的不多,由于不是开源库,所以简单介绍一下该设计工具的思路。

  • 1.思路:如上图,Dragonbones /Spine设计工具的思路是将一张图进行骨骼化拆分,如果需要做动画时,对胳膊/腿等零部件图进行位置的变更即可,不需要对原图进行重新构建。实现了对图片极大的进行复用。

  • 2.Dragonbones / Spine缺点:

    • 图片可以复用,性能较好
    • 不需要发版
    • 研发成本比较大。
    • 需要一整套的解放生产力的工具:
      • a.设计输出工具(插件的二次开发)
      • b.礼物播放引擎(cocos等,三端可用)
  • 3.场景:需要快速迭代的需求。

    SVG 概念

  • SVG 实际上指的是设计软件中的概念:SVG图片格式,一种矢量图形。

  • 另一个角度来讲一张图或者一个动画,是由很多上下层级的图层构成。
    比如当前的简单的图,看到的是一张图,但在设计工具中是三个图层构成,有着不同的上下层级顺序。

SVGA 动画库源码思路

  • 一帧一帧
  • 通过设置帧率,来生成一个配置文件,使得每一帧都有一个配置,每一帧都是关键帧,通过帧率去刷每一帧的画面,这个思路跟gif很像,但是通过配置使得动画过程中图片都可以得到复用。性能就提升上来了。并且不用解析高阶插值(二次线性方程,贝塞尔曲线方程)

Lottie 动画库源码思路

  • 一层一层
  • 完全按照设计工具的设计思路来进行还原,将动画脚本导出并解析。动画脚本非常的轻量。
  • 将所有的动画拆成多个层级,每个层级layer都有一个动画配置,播放时解析多个layer的配置,并给每个layer做相应的动画。也达到了图片可以复用。当需要解析高阶插值(二次线性方程,贝塞尔曲线方程)时,性能相对而言差一点。

SVGA

设计成本

  • SVGA目不支持种类:
    • 不支持复杂的矢量形状图层
    • AE自带的渐变、生成、描边、擦除…
    • 对设计工具原生动画不友好,对图片动画友好(适合礼物场景)
  • 导出工具开源

    开发成本

  • 1.优点
    • 资源包小
    • 测试工具齐全
    • 三端可用
    • 回调完整
    • Protobuf 序列化结构数据格式,序列化的数据体更小,传递效率比xml,json 更高。
  • 2.缺点

    • 每个礼物播放时都去新解压,需要改一套缓存策略
    • svga 用zlib打包(字节流数据压缩程序库),不方便解压和追踪包内容。
  • 4.插入动画头像功能

    • 支持,需定义一套专属的头像配置的协议。

      Lottie

      设计成本

  • 1.Lottie 不支持的设计:
    • 基本满足所有种类的矢量动画和图片动画。
    • 有导出插件

      开发成本

  • 1.优点
    • 三端可用
    • 回调完整
    • 项目已经存在一套缓存逻辑
    • 当前的库可以满足业务需求,不需要二次开发
  • 2.缺点

    • 资源包相较SVGA而言会大一倍多
    • 图片需要重命名 & 偶先播不出来动效。
  • 4.插入动画头像功能

    • 已经支持

性能对比

  • 同一礼物对比
项目SVGALottie
内存占用350339
graphics116-117113 -103
cpu 占用平均5.6,最高15平均5.18,最高13.75
项目SVGALottie
内存占用390362
graphics144-138114-114
cpu 占用平均6.8,最高17平均7.4,最高23
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 动画库对比(Lottie 和 SVGA) 的相关文章

随机推荐

  • 手动缓存Retrofit+OkHttp响应体,不再局限于Get请求缓存

    转载请标明出处 xff1a http blog csdn net iamzgx article details 51764848 本文出自 iGoach的博客 概括 这篇博客是接着上一篇博客学会Retrofit 43 OkHttp 43 R
  • 哪个才是Android工程构建时的gradle版本?gradle-wrapper.properties还是build.gradle的buildscript说了算?

    先说谜底 xff0c gradle wrapper properties说了算 xff08 1 xff09 build gradle的buildscript里的buildscript dependencies的com android too
  • cocos2d-js之入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 54232599 本文出自 iGoach的博客 cocos2d js xff0c 至今日 xff0c 也马马虎虎算接触了一个星期
  • 微信小程序-入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 72615506 本文出自 iGoach的博客 前言 2017年1月9日 xff0c 微信小程序发布 这也标志着FaceBook
  • 使用OkHttp上传图片

    简介 上传图片是一个APP的常见功能 xff0c 可以是通过OOS上传到阿里云 xff0c 也可以直接上传到Server后台 xff0c OOS有提供相应的SDK xff0c 此处忽略 下面通过OkHttp来实现图片的上传 代码 直接上代码
  • 简单说说如何把json或者txt文件转换为db

    前言 最近在Github上找到一个中国城市的json文件 xff0c 虽然也有db文件 xff0c 但是想通过这个json文件生成自己的数据库表 下面就简单来转换成自己的数据库 准备json 在Github找到一个下面json表 34 sp
  • 2018年7月面试记录

    MRCM 聊天缓存如何实现的聊天重发如何实现如何保持长连接心跳简述TCP协议写一个自己最擅长的设计模式 ZHYT finish会立马销毁activity吗view的生命周期activity结束了HandlerQueue如何处理Handler
  • Android面向AOP之AspectJ的使用篇

    前言 AOP xff0c 它不是一门新语言 xff0c 是一种面向切面的思想 它主要的作用是把一些具有相同属性或者相同功能的代码抽离出来形成一个切面 xff0c 从而实现面向切面编程 xff01 而AspectJ就是基于Java语言实现AO
  • 仿拉勾首页之Behavior的学习

    前言 最近在找工作 xff0c 于是打开拉勾 xff0c 看了看首页 xff0c 交互做的还是不错的 先来看看拉勾效果 然后最终实现的效果 布局是图片直接用 xff0c 所以会失真 实现思路 首先这个是一个MD的效果 xff0c 可以使用自
  • Java中Collections类方法常用合集

    目录 1 Collections sort list 2 Collections reverse list 3 Collections shuffle list 4 Collections swap List list int i int
  • 解决Slf4j日志不打印问题

    日志不打印的问题 xff0c 很让人头疼 xff0c 也是我们经常遇到的问题 日常站点状态巡检时发现有异常日志 xff0c 定位到日志位置 xff0c 看其上线文自定义输出的日志时却发现 xff0c 自己加的日志都没输出 排查了一下初步定位
  • Android Studio 配置Gradle总结

    一 xff0c 问题 xff1a 换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办 xff1f 手动配置Gradle Home为什么总是无效 明明已经下载了Gradle xff0c 配置了gradle home 为什
  • android 指纹识别 之 BiometricPrompt的简单使用教程

    1 使用android api 28的sdk创建一个新的项目 创建完成后 xff0c 在build gradle中查看是否正确 2 在AndroidManifest xml中添加用户权限 lt uses permission android
  • Linux常用命令

    expect except是一种自动交互语言 xff0c 能实现在shell脚本中为scp和ssh等自动输入密码自动登录 span class token comment usr bin expect span span class tok
  • 使用 Acegi 保护 Java 应用程序,第 5 部分: 保护 JSF 应用程序中的 JavaBean

    Bilal Siddiqui 在这篇文章中总结了 本系列 xff0c 演示了如何用 Acegi 在 JSF 应用程序中保护对 JavaBean 的访问 可以使用多种方式配置安全 bean xff0c 包括直接在 JSF 标签中使用受 Ace
  • baidu

    1 hashmap的底层原理 和hashtable的区别 put xff1a 对key的hashCode做hash操作 xff0c 然后再计算在bucket中的index xff1b 如果没碰撞直接放到bucket里 xff1b 如果碰撞了
  • ssh 带端口登录

    ssh span class token operator span p 端口号 root 64 ip
  • 域名+解析+GitHub来搭建自己的个人网站

    域名 43 解析 43 GitHub来搭建自己的个人网站 标签 xff1a GitHub使用技巧 网站搭建 版权声明 xff1a 本文为 64 icurious 的原创文章 xff0c 可以转载 xff0c 但请务必注明作者和出处 xff0
  • python之BeautifulSoup之二 带属性值的抓取(find_all('tag', attrs={'class':'value'})

    系统 xff1a Windows python 2 7 11 利用BeautifulSoup库抓取页面的一些标签TAG值 再抓取一些特定属性的值 示例标签 xff1a lt cc gt lt div id 61 34 post conten
  • Android 动画库对比(Lottie 和 SVGA)

    Lottie 和 SVGA 对比 友情链接 xff1a SVGA 源码解析 现有方案 方案一 Gif 帧动画方案二 Native动画 xff08 属性动画 补间动画 xff09 方案三 xff1a 动画库 LottieSVGAKeyfram