Lottie- 让Android动画实现更简单

作者: 新新格子君 | 来源:发表于2017-02-07 14:47 被阅读57584次

    Lottie是什么?

    Lottie是Airbnb开源的一个支持 Android、iOS 以及 ReactNative,利用json文件的方式快速实现动画效果的库。这么看可能很难理解,接下来我将详细的讲解如何使用。
    Lottie项目地址:https://github.com/airbnb/lottie-android


    首先先无耻的把我自己写的demo程序和源码放上来。

    Lottie如何使用?

    一、Lottie能干什么?

    在回答Lottie能干什么之前,我们先想下如下的动画如何实现?

    如何实现上方的动画效果?

    我想大概有几种方式:
    使用帧动画。这种方式固然可行,但是一个需要动画添加很多张图片,势必会导致apk体积变大,并且还要根据不同的尺寸进行适配。

    • 用 Gif。但是使用 Gif 占用空间较大,而且需要为各种屏幕尺寸、分辨率做适配,并且Android本是不支持gif直接展示的。
    • 用代码加图片辅助。如之前写的 仿照驾校一点通欢迎页,这种方式繁琐并且每更新一次都需要重新写很多代码。
    • Android 5.x 之后提供了对 SVG 的支持,通过 VectorDrawable、AnimatedVectorDrawable 的结合可以实现一些稍微复杂的动画,但是问题和前2个类似。

    那么有没有什么方式是即可以方便的实现动画效果,又可以不用考虑适配的问题,而且Android、ios还可以兼容呢?

    Lottie就是支持Android, iOS, 和React Native,并且只需简单的代码就可以实现复杂动画效果的库

    二、Lottie在Android端怎么用?

    假设我们要做一个缓冲数据时的一个loading动画,不用Lottie之前你们公司的美工一般都会给一个gif动画效果和一些切好的一帧一帧的图片。现在不需要这么操作了,只要你们公司的美工做如下的操作:

    下面是公司帅帅的美工的工作
    1. 让设计师使用Adobe 的 After Effects(简称 AE)工具(美工一般都会这个)制作这个动画。
      AE的下载地址:链接: http://pan.baidu.com/s/1misKrzU 密码:f2t7 (安装破解什么的就自行百度吧)
    2. 在AE中安装一个叫做Bodymovin的插件。
      下载 bodymovin,解压缩后只需要\build\extension\bodymovin.zxp这个档案就可以 1478641334-9003-svgani1
      3.手动安装plugin,以windows系统而言,要先下载 **ExMan Command Line tool **并解压缩。
      再来把下载的bodymovin压缩后的 bodymovin-master\build\extension 目录下的bodymovin.zxp 这个档案复制进去同一个资料夹。 1478641336-7754-svgani3

    4.去找cmd,并以系统管理员身分执行。

    1478641339-9310-svgani4

    5.打“cd C:/ExManCmd_win 所在的路径 “,进入ExManCmd的资料夹中

    1478641340-6123-svgani5

    6.接着打 ExManCmd.exe /install bodymovin.zxp 就完成了

    1478641343-7665-svgani6

    7.再来进入AE 后,可以在windows/extentions/bodymovin 找到插件,开启后按下Render 就完成了。 重点来了,这时会在你选的Destination Folder目录中生成一个json格式的文件,这个 json 文件描述了该动画的一些关键点的坐标以及运动轨迹。请帅帅的美工把这个文件发给你苦逼的程序员兄弟吧!

    1478641345-4251-svgani7
    下面就是苦逼Android程序员应该如何做咯

    1.在build.gradle中添加

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

    2.layout文件中添加

        <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" />
    

    3.将帅帅的美工给你的json文件重命名为xml中lottie_fileName的值,如上就是hello-world.json。将hello-world.json放入 app/src/main/assets目录中。打包吧!!

    然后你就会发现奇迹出现了,没有一张图片,没有一个gif,但是动画效果出来了!就是这么简单,就是这么暴力!


    三、Lottie进阶,如何更加高效和方便的实用?

    1.最简单的使用方式就是上方直接在xml中定义的方式。
    2.使用代码的方式,支持从assets目录中直接读取json文件、json字符串的方式、stream流的方式等

    Paste_Image.png
    3.从网络获取json文件,直接显示动画。这种方式很炫,你就可以不用不更新apk就不动声色的定期更新你的动画了。
    下方是我写的一个小demo,使用okhttp访问网络上一段json文件,然后显示动画。
    client.newCall(request).enqueue(new Callback() {
                @Override public void onFailure(Call call, IOException e) {
    
                }
    
                @Override public void onResponse(Call call, Response response) throws IOException {
                    if (!response.isSuccessful()) {
                    }
    
                    try {
                        JSONObject json = new JSONObject(response.body().string());
                        LottieComposition.fromJson(getResources(), json, new LottieComposition.OnCompositionLoadedListener() {
                                    @Override
                                    public void onCompositionLoaded(LottieComposition composition) {
                                        setComposition(composition);
                                    }
                                });
                    } catch (JSONException e) {
                    }
                }
            });
    
    四、Lottie例子程序

    为了更好的让你了解这个库,我写了一个简单的demo,请大家帮忙点star !


    感激

    感谢以下文章:
    这个项目碉堡了
    After Effect 转svg 动画– 神奇的bodymovin 插件

    相关文章

      网友评论

      • e2b007b83c1c:无法获取字体轮廓
      • Jinbeen:人家叫ui设计工程师:smile:
      • 燊在锦官城:网络播放的json文件,里面的图片资源也是网络上的吗
      • 符才锦:bodymovin.zxp装不上 T _ T
      • 3c4c9f5683e8:求问,MAC系统怎么装呢?
      • 605a744a7bcb:可以控制动画的进度吗
      • d01c7cc11c37:安装bodymovin.zxp的时候爆了一个Failed to install status =-403异常,这个怎么回事?
        aeccdc7f0b32:同一个问题 同问
      • 6a72a2e21551:呦 打字工 人家才不是美工呢
      • 风云信步:碉堡了 关键是lottie这个想法太好了 是有革命性的创新
      • allenZP:不会AE的程序员不是好美工
      • 唐_夏影:访问网络那个地址挂了,用这个http://www.wanandroid.com/tools/mockapi/2872/Lottie,用的是博主的LotteLogo和玩Android网站生成的。
      • 卫ov妳守侯:您能给我你的扣扣吗 我有个需求是替换模板的图片展示 您能给我讲讲方法吗
      • fcd82a4a5ff8:很感谢你的文章,想请问下,为什么我点RENDER说找不到合成呢?
      • bbda901d7e0e:你好,我最近也在尝试通过lottie做动效,生成的文件app可以正常预览,但是开发烧到手机上就报错,如果方便请帮忙分析一下,谢谢,我的微信是1070275037,方便请加我,感激不尽,。json链接: https://pan.baidu.com/s/1pLigyCV 密码: sr6p
      • 7b1711cd3f32:问一下,json文件和放图片的images文件夹 可以直接改命名吗 ?
      • 56fdcf3391e2:就是生成之后怎么都跑不起来啊,求教,自己生成的json文件对比了和demo中的json结构什么的,发现都是一样的啊,有谁知道是怎么回事呢????????在线急等........
      • 等不来的夏:你应该说,请美美的UI妹子辛苦一下。
      • 24c08cb4ba8a:楼主,我卡在最后一步了,点击render后,弹窗提示there are no compositions to render,make sure you have at least one selected and....怎么破?
      • 24c08cb4ba8a:楼主,我卡在最后一步了,点击render后,弹窗提示there are no compositions to render,make sure you have at least one selected and....怎么破?
      • 24c08cb4ba8a:楼主,我卡在最后一步了,点击render后,弹窗提示there are no compositions to render,make sure you have at least one selected and....怎么破?
      • 戴定康:https://www.lottiefiles.com/ JSON动画下载地址
        Yapple:这个里面有些很棒的在android上不能用,是动画太复杂了吗?
        康熙十八年:很棒!多谢,老铁
        a682b8a9bb06:谢谢老铁
      • 赵树振521:我导出的json文件也没有动画效果,而且只有通过ae手动画的图形才显示形状加的外部图片不显示,求指教
        赵树振521:个人通过认真研究已经成功实现,本着知识共享的原则有问题的同学联系2390048028
      • 丑丑死了:目前插件导出的文件不会包含有AE里面设置的图层样式是吗
      • 574e0b50fa65:我想问一下,这种动画只支持svg矢量的吗?如果是在ps里面做好的图,导进ae,也能用这个实现吗?
      • Micky_2bc8:你全家都是美工:smiley:
        Iven_7596:老铁没毛病! 说的好:kissing_heart:
        木木_d555:没毛病!
        恒等式古怪:食⑩啦你
      • 一只玩具熊:为什么导出来的json文件什么都没有:cry:
      • 吉凶以情迁:说了一堆废话跟没说一样。这些都很简单,直接github都有,关键的疑难点没说如何处理背景透明 如何处理 多个动画同时播放,如何解决网络图片不能立马播放问题。
        夏侯撒:吊得一逼,如何解决网络图片不能立马播放问题。简直是在说人如何不呼吸活着一样,简直无稽之谈。
        新新格子君:@情随事迁666 您别看就是的咯。
      • zkxok:博主能帮忙看下吗?我们公司导的json也不能用,我已经发你邮箱了
      • 一海千城梦灬一梦海千城:博主u在吗 ? 我下载 ExMan Command Line tool 链接打不开 网上也没有相关下载能给我提供一个链接吗 谢谢
        一海千城梦灬一梦海千城:已通过其他方式解决
      • zkxok:我们公司的导的json也不出效果
      • 2de49878ced2:您好,我这边bodyMovin安装不上,可否帮我引入我这边的本地图片导出json
        7493aed0dffc:http://www.mq2014.com/bodymovin-ae-cha-jian-mac-win-an-zhuang-xia-zai.html
      • 酷玩技术派:设计不会AE的哭着学AE
      • 45506489ab11:写的很不错,很仔细,我现在也适用到这个,为什么我导入lottie-android源码,一直都在下载依赖呢,博主有向AS里面导入lottile-android 源码吗,跪求回复啊
      • 7725d06737cc:"再来把下载的bodymovin压缩后的 bodymovin-master\build\extension 目录下的bodymovin.zxp 这个档案复制进去同一个资料夹”

        这句话转了几个大弯?,Mac用户怎么破
      • 1f158af5fbd0:怎么安装那个 bodymovin啊。。我用管理员身份启动CMD之后,按照步骤做了,还是安装不了,最后输入install bodymovin.zxp之后就没反应了
        a49f600bffac:其实如果装有adobe manager ,就不需要这个程序辅助安装了吧
        a49f600bffac:ExManCmd.exe /install bodymovin.zxp
      • 大大周:为什么下载了跑不起来!!直接崩溃了
      • 逍遥散人_095:你好大神,我们公司的美工也是按照你的步骤导出的json文件,但是用不了!
        Ivy_8f53:请问这个怎么解决的?我的和你一样的问题
        逍遥散人_095:@新新格子君 好的,我发你邮箱了!
        新新格子君:是出不来动画吗?方便的话可以将json文件发我邮箱,我来试试2934993883@qq.com
      • jjstudio:Mac系统没法用吗?!?
      • d3b602e70cc9:简单直接
      • d3b602e70cc9:zuk z2pro的7.0 ROM,安装博主demo,动画不播放,是静态。。
      • 双鱼大猫:这个技术厉害了!

      本文标题:Lottie- 让Android动画实现更简单

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