27 个回答
今天刚好粗略看了下源码,简单说一下这个库。
一. Lottie 是什么
首先这个库是做什么的?
通过 AE 上的 Bodymovin 插件将 AE 中制作好的动画导出成一个 json 文件,Lottie 实现了 Android/iOS/React Native 三个平台对该 json 文件的解析和渲染。(Android 端项目地址为: airbnb/lottie-android airbnb/lottie-android )
可能看到这里你该有疑问了,那 Bodymovin 插件从何而来?
bodymovin 从项目介绍上看是一个个人库,它的主要功能是将 AE 导出的动画在 Web 端执行。所以 Airbnb 做的主要工作是将该项目扩展到移动端。
二. 优点
它最大的优点是提供了一套完整的跨平台的动画实现工作流。
试想一下,以往要实现一个动画,我们需要多端各自实现且动画的复杂度受时间成本和开发者能力的约束。现在,通过这套流程我们可以将 AE 中的动画很轻松得在 web 端、移动端显示出来,这大大提高了动画的开发效率及减轻工作量。
其次,相对于类似的实现方案GIF、手写动画、帧动画而言,这个方案更为轻量,性能和存储上都更佳。
从代码上看,Android 端的实现是基于 Drawable、iOS 端是基于 Layer —— 最终都是对 canvas 的操作,中间除去解析 json 外,基本无耗费性能的行为。(官方文档有提到,masks 和 mattes 动画较为耗费性能,原因是需要额外的 Bitmap 辅助,这点需注意)
而存储上,动画由 json 文件描述,占用空间不多。
也是因为动画由 json 文件描述,所以它的第三个优点是 动画的更新及其方便 。在之前,假如我们要完成动画动态更新需求,要么使用上述所说的 GIF、帧动画等方案,要么就自定义动画描述文件或用笨重的xml来完成动画。那么现在用 json 文件,简直再方便不过了。
三. 仍然存在的问题
1. Bodymovin 插件待完善,仍然有部分 AE 效果无法成功导出;
2. Lottie 对 json 文件的支持待完善,目前有部分能成功导出成 json 文件的效果在移动端上无法很好的展现;
3. 目前不支持文字,所有文字必须转成矢量图才能正常展现动画;
4. 动画无法被编辑,即移动端无法更改远端下载到本地的动画;
5. 文档需要跟进。。现在的 json 文件内容看的好蛋疼。。根本没法开开心心提 PR;
等等等。
话虽如此,以上这些问题都可以随着时间的推移而解决,期待 Airbnb 的推进。
在睡前简单答了下,有错漏的地方还请指出~周末有空准备继续研究下源码,到时再更新。
长久以来设计师的越炫酷越好”与程序猿的“够用就好”的矛盾在自定义动画上体现的尤为明显。我相信还原一个优秀动画的过程中,二者的“撕逼”是无止尽地,一场“撕逼”下来双方都是一肚子苦水,此处略去一本辞海 ... ...
作为一个设计师我“曾经”天真的想过,有没有一键将动画生成代码的工作流。说真的我幻想了很久,最近似乎这个幻想慢慢地接近成真了!!虽然之前已经出现了squall、bodymoving(它已经很具有想象力了,但是今天的这个开源动画库,让它的想象力成为了真正的生产工具)等工具,但都有其局限性,要么平台限制,要么动画元素的局限性。
不过,一个革命性的开源动画库诞生了!
我们有了一个衔接设计与开发的新的工作流,它就是Airbnb 发布的 Lottie !
Lottie 的使用流程很简单,就是在AE中设计完成你的动画后,通过bodymoving插件导出一份记录动画信息的JSON文件,然后开发人员使用 Lottie 的Android,iOS,React Native apps开源动画库读取这份JSON文件。
工欲善其事必先利其器!
- Adobe AE CC 2017版本
- ZXP installer 一个AE插件与脚本安装工具
- bodymovin 一个将AE合成转换为记录动画信息的JSON文件的插件
- Lottie Android iOS React Native Lottie 开源动画库
一一倒腾之后,就可以体会它的无穷魅力了,在朋友圈得知此消息后已经乐此不疲的折腾了好久了,以后再也不用导出gif图了,以后做动画似乎可以肆意挥霍自己的任性了?!
···················· 以下内容不定期更新 ····················
目前 Lottie开源动画库/bodymoving 支持的AE属性
Keyframe Interpolation 关键帧插值
Linear Interpolation 线性(关键帧)插值
Bezier Interpolation 贝塞尔插值
Hold Interpolation 定格插值
Rove Across Time 漂浮插值(漂浮穿梭时间 )
Spatial Bezier 空间插值
Solids 固态层
Transform Anchor Point 描点变换
Transform Position 位置变换
Transform Scale 缩放变换
Transform Rotation 旋转变换
Transform Opacity 透明度变换
Masks 蒙版
Path 路径
Opacity 透明度
Multiple Masks (additive) 多个蒙版(叠加模式)
Track Mattes 遮罩模式
Alpha Matte 带alaha通道的遮罩
Parenting 父子关系
Multiple Parenting 多级父子层
Nulls 空对象
Shape Layers 形状层
Anchor Point 描点
Position 位置
Scale 缩放
Rotation 旋转
Opacity 透明度
Path 路径
Group Transforms (Anchor point, position, scale etc) 组变换
Rectangle (All properties) 矩形路径(所有属性)
Ellipse (All properties) 椭圆路径(所有属性)
Multiple paths in one group 一个组里的多个路径
Stroke (shape layer) 描边(形状层)
Stroke Color 描边颜色
Stroke Opacity 描边透明度
Stroke Width 描边宽度
Line Cap 描边端点(圆头,平头)
Dashes 描边断点
Fill (shape layer) 填充(形状层)
Fill Color 填充颜色
Fill Opacity 填充透明度
Trim Paths (shape layer) 修剪路径(形状层)
Trim Paths Start 修剪路径起点
Trim Paths End 修剪路径终点
Trim Paths Offset 修剪路径偏移
···················· 以上内容不定期更新 ····················
最后,希望Adobe和Airbnb能好好把它弄起来,我相信这个以后会成为衔接动效与开发的高效工作流之一!
以上