LottieTest
Lottie 是什么?
Lottie 是 Airbnb 开源的一个支持 Android、iOS 以及 ReactNative,利用 json 文件的方式快速实现动画效果的库。这么看可能很难理解,接下来我将详细的讲解如何使用。 Lottie 项目地址:https://github.com/airbnb/lottie-android
首先先无耻的把我自己写的 demo 程序和源码放上来。
- Demo 体验 apk 下载地址: https://fir.im/5j4e
- Demo 程序的 github 地址 : https://github.com/panacena/LottieTest/
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 动画效果和一些切好的一帧一帧的图片。现在不需要这么操作了,只要你们公司的美工做如下的操作:
下面是公司帅帅的美工的工作
- 让设计师使用 Adobe 的 After Effects(简称 AE)工具(美工一般都会这个)制作这个动画。 AE 的下载地址:链接: http://pan.baidu.com/s/1misKrzU 密码:f2t7 (安装破解什么的就自行百度吧)
- 在 AE 中安装一个叫做 Bodymovin 的插件。 下载 bodymovin,解压缩后只需要\build\extension\bodymovin.zxp 这个档案就可以 3.手动安装 plugin,以 windows 系统而言,要先下载 ExMan Command Line tool 并解压缩。 再来把下载的 bodymovin 压缩后的 bodymovin-master\build\extension 目录下的 bodymovin.zxp 这个档案复制进去同一个资料夹。
5.打“cd C:/ExManCmd_win 所在的路径 “,进入 ExManCmd 的资料夹中
6.接着打 ExManCmd.exe /install bodymovin.zxp 就完成了
7.再来进入 AE 后,可以在 windows/extentions/bodymovin 找到插件,开启后按下 Render 就完成了。 重点来了,这时会在你选的 Destination Folder 目录中生成一个 json 格式的文件,这个 json 文件描述了该动画的一些关键点的坐标以及运动轨迹。请帅帅的美工把这个文件发给你苦逼的程序员兄弟吧!
下面就是苦逼 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 进阶,如何更加高效和方便的实用?
- 最简单的使用方式就是上方直接在 xml 中定义的方式。
使用代码的方式,支持从 assets 目录中直接读取 json 文件、json 字符串的方式、stream 流的方式等
从网络获取 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 !
- Demo 体验 apk 下载地址: http://fir.im/5j4e
- Demo 程序的 github 地址 : https://github.com/panacena/LottieTest/