美文网首页
Lottie框架的学习

Lottie框架的学习

作者: PeterGQ | 来源:发表于2017-02-08 22:25 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:Lottie框架的学习

          本文链接:https://www.haomeiwen.com/subject/feibittx.html