美文网首页react-native三方管理android 集结号
Lottie开源动画库介绍与使用示例

Lottie开源动画库介绍与使用示例

作者: Trojx | 来源:发表于2017-02-06 20:49 被阅读47348次

    碉堡的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本身这个动画播放库并不是跨平台的.

    上手使用

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

    安装Adobe After Effects CC 2017

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

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

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

    安装bodymovin插件

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

    下载bodymovin.zxp插件包

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

    安装插件

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

    这三种笔者都试过,最后得出只有第二种(也是看起来最繁琐的)有效.这里详细说明一下第二种方法:

    • 先关闭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

    开始制作动画

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

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

    导出json数据

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

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

    在插件窗口中选择json数据文件导出的路径,点击Render按钮即可渲染工程并导出.

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

    使用Lottie库播放动画

    终于说到主角了,然而关于它的使用方式却是相对简单的.Lottie的引入与使用就如其他库一样,这里以Android平台的使用为例.

    在项目的build.gradle文件中加入:

        dependencies {  
          compile 'com.airbnb.android:lottie:1.0.1'
          ...
        }
    

    Lottie支持Jellybean (API 16)及以上的系统,最简单的使用方式是直接在布局文件中添加:

        <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文件中导入动画数据:

        LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
        animationView.setAnimation("hello-world.json");
        animationView.loop(true);
    

    这方法将在后台线程异步加载数据文件,并在加载完成后开始渲染显示动画.
    如果你想复用加载的动画,例如下一个ListView中每一项都需要显示这个动画,那么你可以这么做:

        LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
        ...
        LottieComposition composition = LottieComposition.fromJson(getResources(), jsonObject, (composition) -> {
            animationView.setComposition(composition);
            animationView.playAnimation();
        });
    

    你还可以通过API控制动画,并且设置一些监听:

        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形式:

        LottieDrawable drawable = new LottieDrawable();
        LottieComposition.fromAssetFileName(getContext(), "hello-world.json", (composition) -> {
            drawable.setComposition(composition);
        });
    

    如果你需要频发使用某一个动画,可以使用LottieAnimationView内置的一个缓存策略:
    LottieAnimationView.setAnimation(String, CacheStrategy)
    其中CacheStrategy的值可以是Strong,Weak或者None,它们用来决定LottieAnimationView对已经加载并转换好的动画持有怎样形式的引用(强引用/弱引用).

    补充

    lottie在iOS中的使用介绍可以参看陳董DON的文章

    分享一个能够在浏览器中预览json动画数据的网站

    Lottie官方给的Android Demo安装包使用它能够查看示例动画,并能够载入并播放来自本地存储或网络的json动画数据.

    好了,先写到这里,我去研究AE去了~后续应该会补上一个使用Lottie的Android Demo.
    原文地址 http://www.trojx.me/2017/02/06/android-lottie-library/

    相关文章

      网友评论

      • 正直的瓜子脸:从后台进入前台, 动画停止怎么处理
      • 林下遇夕:大佬你好,我是名UI,1.我已经导出.json文件了,但是用你分享的查看json动画的网站,并没有动画,请问是不是这样没成功? 2.如果成功导出动画,我发给前端只一个json文件就可以实现效果了么?特别感谢🙏
      • 4b3590482003:大神,我的动画里有渐变色,为什么在插件里面预览后图像是黑白的呢?
      • FlyClound:LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
        animationView.setAnimation("hello-world.json");
        animationView.loop(true);

        这个方法为什么无效呢?
      • 技术特工队:您好,我想转载这块文章到公众号:技术特工队, 会标明出处及来源。谢谢。
        技术特工队:@Trojx 这个还没有授权给其他公众号吧?
        技术特工队:@Trojx 好的没问题
        Trojx:@技术特工队 可以转载,请注明出处
      • 9233d1ae080b:是不是ae中全部都要手动画,不能导入png格式的图,那渐变什么的也要在ae里面做么
      • 胡思乱想的馒头:非常详细,赞
      • a4377c67e6e0:如果有图片的动画怎么导出
      • 574e0b50fa65:安装成功了,也导出成功了,但是几天过后再次打开却出错了,显示:Unable to execute script at line 1. bm_compsManager is undefined。这是怎么回事啊?如果要重装的话怎么卸载呢?
      • b2e75a586caa:Mac 版本按照步骤安装为什么在ae扩展里面看不到呢,求助
      • Badwritten:厉害!
      • e0525d76be36:我在CC2017安装好后 在扩展里也看到了 bodymovin的 选项,可是点击后没反应了,没有弹出其他窗口呢。。。请问这个怎么破?
      • 8777d43bba5e:你好 现在到处JSON文件,会有掉帧现象,画面很卡 是怎么回事
      • 74658e844d98:为什么我下载下来是绿色的版本啊 不知道哪一步出了问题,求解呀
      • 2381aeeb38d5:请问,在回到后台时候,可能监控动画的生命周期吗?我看切到后台后动画是暂停的。
        正直的瓜子脸:这个问题解决了吗, 我也遇到了
      • Gollum_:为什么 iOS 在播放带有外发光半透明的素材时候回出现闪烁的问题呢 求解
      • b0cde5993d95:我想问一下 已经在AE里安装好 但点击bodymovin 弹出的是绿色界面 不是红色 而且我导出 直接报错了 想知道问题出在哪里了
      • 5cb5b22995da:碉堡了
      • 黎子航:干货啊
      • 45506489ab11:写的很不错,我现在也要用到这个开源项目
      • 小狮子_7df4:请问我看GitHub上说有对Track Mattes:Alpha Matte支持,但是我做出来没有遮罩效果,我都是用形状图层做的,而且形状有变形,不知道怎么解决
      • a215288f6a98:呼叫LZ,Mac用户表示没找到文件夹地址,求图。
      • e57143970733:不能能导出png呀?
        Trojx:@佳伟 你好,最新版的lottie已经支持图片资源;请见 https://github.com/airbnb/lottie-android#image-support
      • 健健可迪仔:安装AE的时候停留在了gathering required information,过了一会安装器没有任何提示的就退出了
      • 8d401c4974de:工程动画中能加图片吗?我用一个GIF导出json文件,把文件里面需要的图片也放到应用里面了,但还是无法正常运行。有什么好的处理办法吗?谢谢
        林下遇夕:@你不知道不知道我知道 同问,不知道一年过去了,你有没有知道方法
        9233d1ae080b:@Trojx 这个是在做ae的源文件里插入了相关图片做的动画后,也要把相关png图片提供给开发放入代码中对么
        Trojx:你好,新版lottie的应该是具有使用静态图片资源的特性了,可以参考这个: https://github.com/airbnb/lottie-android/issues/71
      • jjstudio:com.adobe.CSXS.6.plist
        我没有发现这个文件啊!!!
        林下遇夕:我的也没有找到,但是也可以使用
        jjstudio:只找到:com.adobe.acc.AdobeDesktopService.plist、com.adobe.acrobat.pdfviewer.plist、 com.Adobe.After Effects.paths.plist、com.adobe.headlights.apip.plist、com.adobe.headlights.apipcc.plist、com.Adobe.Premiere Pro.paths.plist这几个文件。
      • 2ff328e7d0dc:大神,为什么我的AE-窗口下没有扩展啊
        Trojx:你好,下载文中提到的AE版本,并按照文中所描述的方式安装bodymovin插件,应该是不会出问题的.如果你用的是其他版本,或其他安装bodymovin插件的方式,就不保证你能正常安装了.这个问题和lottie没有关系的,可以去AE社区或bodymovin社区寻求更多相关问题解决办法.
      • 清晨日暮:大神,有demo吗???
      • 折原:叼
      • 开发者头条_程序员必装的App:感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/466oww 欢迎点赞支持!
        欢迎订阅《八人行》https://toutiao.io/subjects/95877
        chenxuxu:@HJXu 他转载的是他自己的个人博客..
        HJXu:搞不清为啥一个转载的文章还获得这么多好评
      • ab72c065186a:厉害了Trojx
      • winkstu:安装器安装貌似只支持AE CC 2014和2015

      本文标题:Lottie开源动画库介绍与使用示例

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