Lottie框架的学习

Lottie框架
个人操作简述步骤:
1.下载Creative Cloud,这个是adobe公司专用的下载器,若之前有下载adobe公司其它产品的话,先去搜CleanerTool清除一切adobe的文件和注册表,然后重启,下载这个creative cloud;
2.下载 ae cc 2017,在creative cloud上面下载,选择最新版本,试用就行了;
3.下载ZXP INSTALLER 地址为:http://aescripts.com/learn/zxp-installer/ ,网络不通畅时候会很慢;
4.下载bodymovin文件,上github搜这个插件,直接下载,解压后在build/extension后有个.zxp的文件;

5.打开zxp installer软件,选中open再选择这个.zxp文件,然后根据弹出的框选择 for me,然后就安装成功,
6.打开AE CC 2017可以看到在"窗口-扩展程序"里有个bodymovin,直接点击就开启使用,
7.制作动画然后点击"窗口-扩展程序"的bodymovin,会提取当前项目可提取的文件,然后选中左侧按钮变红,再点击"..."选择具体的生成路径和文件名,再点击左上角的Render则渲染生成.

1.碉堡的Lottie

Airbnb最近开源了一个名叫Lottie的动画库,它能够同时支持iOS,Android与ReactNative的开发.此消息一出,还在苦于探索自定义控件各种炫酷特效的我,兴奋地就像发现的新大陆一般.可以说,Lottie的出现,将极大地解放Android/iOS工程师于无尽的编写原生自定义动画的工作中.
当我们的项目中用GIF实现一些复杂的视觉效果的时候,会遇到许多的问题.比如,GIF的文件过于庞大,并且对于不同分辨率设备的适配存在不便,并且Gif格式的色深问题是一个死穴.

比如下面这几个动画效果:

http://cdn.trojx.me/blog_pic/Example1.gif

还有这些:

http://cdn.trojx.me/blog_pic/Example2.gif

设计这些动画效果显然不是写代码的程序员应该负责的事情.那有没有什么办法,能让美工在AE软件上设计的动画直接用于移动端呢?
有的,那就是使用Lottie.

http://cdn.trojx.me/blog_pic/lottie_sum.png

如上图所示,通过安装在AE上的一款名叫bodymovin的插件,能够将AE中的动画工程文件转换成通用的json格式描述文件,bodymovin插件本身是用于在网页上呈现各种AE效果的一个开源库,lottie做的事情就是实现了一个能够在不同移动端平台上呈现AE动画的方式.从而达到动画文件的一次绘制、一次转换、随处可用的效果.
当然,就如Java一次编译,随处运行一样,lottie本身这个动画播放库并不是跨平台的.

2.上手使用

说了那么多,下面来详细说说怎样使用这个碉堡的库.首先声明,以下涉及到的软件可能包含破解版,如果你资金充裕,请支持正版.
以下使用方式与软件在2017年2月6日都有效.

2.1 安装Adobe After Effects CC 2017

Adobe是个好公司,做了很多牛逼的软件,但是无一例外都被国人破解了.本例使用的是最新版的AE CC 2017.

1.单独下载安装

http://cdn.trojx.me/blog_pic/AE_CC_2017.png(1)网络可用下载地址 :

http://www.dayanzai.me/after-effects-cc-2014.html

(2)CDN分流地址:

http://trojx-me.oss-cn-hangzhou.aliyuncs.com/AE%202017%5BWwW.DaYanZai.Me%5D.rar

感谢作者提供软件.注意此版本只适用于WIN 64位系统,笔者在 Win7 64 位
环境下能够正常安装并使用.安装过程中按照内置说明安装即可.

2.从软件列表中安装

adobe自带有个adobe creative cloud的桌面应用,用于下载各种adobe数据处理软件,下载后在里面找到AE最新版本进行下载

2.2 安装bodymovin插件

想了解此插件可以参看该插件的GitHub页面.

下载bodymovin.zxp插件包

此文件位于工程中的/build/extension/目录下,如果外网速度慢可以从这里可以下载该插件的最新版本.

安装插件

项目说明中给出了为AE安装插件的三种方式:

通过第三方软件ZXP Installer安装;
手动安装;
使用Adobe官方插件安装器安装

(1)第一种
通过第三方软件ZXP Installer安装 http://aescripts.com/learn/zxp-installer/

点击进行安装,会自动配置需要的文件,中间可能需要重启下,不缺文件则直接下载完成,大概12M大小
打开zxp installer,点击"open"选择文件,再在弹出的框中选择"for me",直接导入成功,打开AE - "窗口" - "扩展"就有
(2) 第二种(尝试第一种无效后,最繁琐的):

先关闭AE;
用WinRAR或类似软件打开bodymovin.zxp文件,并将解压后的文件夹直接复制到C:\Program Files (x86)\Common Files\Adobe\CEP\extensions
或者是C:<username>\AppData\Roaming\Adobe\CEP\extensions下,对于MAC机器路径是/Library/Application\ Support/Adobe/CEP/extensions/bodymovin
http://cdn.trojx.me/blog_pic/bodymovin_zxp_extracted.png
http://cdn.trojx.me/blog_pic/bodymovin_zxp_extracted_copy.png
修改注册表.对于Windows,打开注册表修改器,找到HKEY_CURRENT_USER/Software/Adobe/CSXS.6,并在此路径下添加一个名为PlayerDebugMode的KEY,
并赋值为1;对于MAC,打开文件~/Library/Preferences/com.adobe.CSXS.6.plist并在末尾添加一行,键为PlayerDebugMode,值为1.
设置AE 无论以何种方式安装bodymovin插件,都需要在AE的编辑->首选项->常规中勾选允许脚本写入文件和访问网络(默认不开启)
http://cdn.trojx.me/blog_pic/ae_setting.png

(3)通过Adobe官方下载
https://helpx.adobe.com/creative-cloud/kb/installingextensionsandaddons.html
直接从Install add-ons的第五步开始,Install third-party extension下载Windows版本的ExMan command-line tool工具
将下载的压缩包解压到和 .zxp的bodymovin文件(文件来自github上的android版Lottie文件/build/extension下)放在同个文件夹下
PC端搜索cmd,右键选择以管理员身份运行,然后切换到此文件夹下,输入命令: ExManCmd.exe /install bodymovin.zxp最后面就是插件的全名,安装正常则成功.若安装不正常

安装都失败的处理方法:
清除卸载自己电脑上的Adobe其它音视频处理软件
下载Adobe官方自带的清除工具 AdobeCreativeCloudCleanerTools.exe
打开软件,选择"e"英文,选择"y"允许,出现如下列表,是提示要卸载的软件类型,而不是你电脑上的Adobe软件,选择其中的什么cs cc卸载就好,或者你没使用过这些,就直接选择"1"all,全部卸载感觉,注册表也会清理干净

卸载完成后重新尝试执行以上步骤.
2.3 开始制作动画

由于笔者目前不会使用AE(废话,软件都是刚装的),这里我们打开一个现有的工程文件.
从这里可以找到一些Lottie中演示过的动画的AE源文件,下载到本地后在AE中打开即可.这里我们选用EmptyState.aep这个实例工程,稍作修改:

http://cdn.trojx.me/blog_pic/empty_page_editting.png

2.4 导出json数据

如果上文的bodymovin插件安装成功的话,在AE中的窗口->拓展中是能够找到它的.

http://cdn.trojx.me/blog_pic/ae_bodymovin_menu.png

在插件窗口中选择json数据文件导出的路径,点击Render按钮即可渲染工程并导出,若有多个,则先"Selected"选择要导出的文件

http://cdn.trojx.me/blog_pic/ae_bodymovin_render.png

原始工程动画效果:
http://cdn.trojx.me/blog_pic/empty_state_origin.gif

原始工程导出的json文件:http://cdn.trojx.me/blog_raw/lottie_data_origin.json

修改后工程动画效果:
http://cdn.trojx.me/blog_pic/empty_state_edit.gif

修改后工程导出的json文件:http://cdn.trojx.me/blog_raw/lottie_data_edit.json

2.5 使用Lottie库播放动画

简述源码:
1.通过LottieComposition去获取本地或网络的json文件
2.LottieComposition的fromJsonSync方法解析json数据然后交给addLayer方法,addLayer方法交由Layer类处理得到Layer对象作为LottieComopsition的成员数据(Layer处理所有的基础动画数据)
3.将LottieComposition对象设置给LottieAnimationView这个动画显示控件使用,提供一系列的监听,事件,时间的设置接口.

使用方法:
以Android平台的使用为例,在项目的build.gradle文件中加入:
1
2
3
4
dependencies {
compile 'com.airbnb.android:lottie:1.0.1'
...
}
Lottie支持Jellybean (API 16)及以上的系统,最简单的使用方式是直接在布局文件中添加:

1
2
3
4
5
6
7
<com.airbnb.lottie.LottieAnimationView
android: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" />
或者,你也可以通过代码的方式添加.比如从位于app/src/main/assets路径下的json文件中导入动画数据:

1
2
3
LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");
animationView.loop(true);
这方法将在后台线程异步加载数据文件,并在加载完成后开始渲染显示动画.
如果你想复用加载的动画,例如下一个ListView中每一项都需要显示这个动画,那么你可以这么做:

1
2
3
4
5
6
LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
...
LottieComposition composition = LottieComposition.fromJson(getResources(), jsonObject, (composition) -> {
animationView.setComposition(composition);
animationView.playAnimation();
});
你还可以通过API控制动画,并且设置一些监听:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
animationView.addAnimatorUpdateListener((animation) -> {
// Do something.
});
animationView.playAnimation();
...
if (animationView.isAnimating()) {
// Do something.
}
...
animationView.setProgress(0.5f);
...
// 自定义速度与时长
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
.setDuration(500);
animator.addUpdateListener(animation -> {
animationView.setProgress(animation.getAnimatedValue());
});
animator.start();
...
animationView.cancelAnimation();
在使用遮罩的情况下,LottieAnimationView 使用 LottieDrawable来渲染动画.如果需要的话,你可以直接使用drawable形式:

1
2
3
4
LottieDrawable drawable = new LottieDrawable();
LottieComposition.fromAssetFileName(getContext(), "hello-world.json", (composition) -> {
drawable.setComposition(composition);
});
如果你需要频发使用某一个动画,可以使用LottieAnimationView内置的一个缓存策略:
LottieAnimationView.setAnimation(String, CacheStrategy)
其中CacheStrategy的值可以是Strong,Weak或者None,它们用来决定LottieAnimationView对已经加载并转换好的动画持有怎样形式的引用(强引用/弱引用).

3.补充

lottie在ios的使用介绍参考:

http://ios.devdon.com/?p=241&from=trojx.me

分享能在浏览器预览json动画数据的地址:

http://svgsprite.com/demo/bm/player.php?render=canvas&bg=fff

参考文章: http://www.trojx.me/2017/02/06/android-lottie-library/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容