Lottie Android 初探

Lottie是一个支持Android、iOS、React Native,并由 Adobe After Effects制作aep格式的动画,然后经由bodymovin插件转化渲染为json格式可被移动端本地识别解析的Airbnb开源库。

Lottie实时呈现After Effects动画效果,让应用程序可以像使用静态图片一样轻松地使用动画。

Lottie支持API 14及以上。

一、预览

二 、基本使用

在自己项目module的build.gradle文件中添加如下代码:

dependencies {

compile 'com.airbnb.android:lottie:2.0.0-beta4'

}

复制代码

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

复制代码

其中lottie_loop属性为是否重复无限期动画,当为true时,动画无限次数播放,为false时,播放一次。

或者把json资源放在app/src/main/assets下,也可以这样使用它:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);

animationView.setAnimation("hello-world.json");

animationView.loop(true);

animationView.playAnimation();

复制代码

该方法将加载文件并在后台解析动画,在完成后异步开始呈现。

如果您希望重用一个动画,例如在列表的每个项目中,或者从一个网络请求JSONObject中加载它:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);

...

Cancellable compositionCancellable = LottieComposition.Factory.fromJson(getResources(), jsonObject, (composition) -> {

animationView.setComposition(composition);

animationView.playAnimation();

});

// 取消异步加载

// compositionCancellable.cancel();

复制代码

你也可以控制动画添加监听:

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();

复制代码

你可以给整个动画,一个特定的图层,或者一个图层的特定内容添加一个颜色过滤器。

// 任何符合颜色过滤界面的类

final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);

// 在整个视图中添加一个颜色过滤器

animationView.addColorFilter(colorFilter);

//在特定的图层中添加一个颜色滤镜

animationView.addColorFilterToLayer("hello_layer", colorFilter);

// 添加一个彩色过滤器特效“hello_layer”上的内容

animationView.addColorFilterToContent("hello_layer", "hello", colorFilter);

// 清除所有的颜色滤镜

animationView.clearColorFilters();

复制代码

注意:颜色过滤器只适用于图层,如图像层和实层,以及包含填充、描边或组内容的内容。

在引擎盖下,LottieAnimationView使用LottieDrawable呈现其动画。如果需要,您可以直接使用可绘制的表单:

LottieDrawable drawable = new LottieDrawable();

LottieComposition.Factory.fromAssetFileName(getContext(), "hello-world.json", (composition) -> {

drawable.setComposition(composition);

});

复制代码

如果你的动画会经常重用,LottieAnimationView内置了一个可选的缓存策略。使用LottieAnimationView .setAnimation(String,CacheStrategy)。CacheStrategy可以Strong, Weak, 或者None。LottieAnimationView对加载和解析的动画持有强或弱的参考。弱或强表示缓存中组合的GC参考强度。

三、Image 支持

如果您的动画是从assets中加载的,并且您的图像文件位于assets 的子目录中,那么您可以对图像进行动画。你可以用LottieAnimationView或者LottieDrawable对象调用setImageAssetsFolder(String)方法,明确assets相对文件夹内的路径,确保图像bodymovin出口与他们的名字不变,文件夹应该img_ 开头。如果直接使用LottieDrawable,当你完成时您必须调用recycleBitmaps。

如果你需要提供你自己的位图,如果你从网络或其他地方下载,你可以提供一个委托来做这个:

animationView.setImageAssetDelegate(new ImageAssetDelegate() {

@Override public Bitmap fetchBitmap(LottieImageAsset asset) {

getBitmap(asset);

}

});

复制代码

四、性能和内存

如果该组合没有遮罩或mattes,那么性能和内存开销应该相当不错。没有创建任何位图,大多数操作都是简单的画布绘制操作。

如果这个组合有遮罩或mattes,就会使用屏幕外的缓冲区,并且会有一个性能打击。

如果在你的动画列表中使用,推荐使用CacheStrategy,在调用LottieAnimationView.setAnimation(String, CacheStrategy)的时候,所以动画不需要每次都反序列化。

五、Lottie官方Demo下载

https://fir.im/lottiedemo

复制代码

六、参考资料

http://airbnb.design/lottie/

http://www.lottiefiles.com/

https://github.com/airbnb/lottie-android

http://www.adobe.com/cn/products/aftereffects.html

https://github.com/bodymovin/bodymovin

https://github.com/airbnb/lottie-react-native

https://github.com/airbnb/lottie-ios

https://github.com/airbnb

复制代码

android lottie api,Lottie Android 初探相关推荐

  1. android百度api配置,Android Studio 配置使用百度api (附带简单样例)(示例代码)

    还是和同学开发的那个课程作业项目的app, 要使用到百度地图的api 但是,官方文档貌似只有Eclipse的例子,对Android Studio似乎没有说明.  难道,是因为后者是 "Doo ...

  2. Android的 API 框架,Android 声明式 UI 框架 Litho 初探 —— Sections API

    在最开始入门介绍中,我们曾经用SingleComponentSection完成了一个简单的列表,当时的做法是使用 for 构造出了多个子Component.其实在 Litho 中提供了一个性能更好的方 ...

  3. android 中文api 在线测试,android webview测试方法

    利用chromedriver操作webview 1.创建chrome serverchromedriver --url-base=wd/hub --port=9515 --adb-port=5037 ...

  4. android常用api大全,Android API详解大全.pdf

    Android API详解大全 Android -- TextView 一.TextView的API 1.1 结构 java.lang.Object ↳ android.view.View ↳ and ...

  5. android常用api大全,Android开发个人总结常用的api

    前言 这只是记录下开发过程中常用的api,是经常可能忘了导致去百度的 我还是希望大家最好记在脑子里,需要也提倡查找api,但我感觉只有记住了才能融会贯通,满足需求.每次查出来的,怕不了解,不敢修改等等 ...

  6. android常用api大全,Android相关常用API……

    android.provider.MediaStore里包含了相关的Image,Video,Audio信息,可通过managedQuery方法来查询和遍历. Android中的AdapterView使 ...

  7. Android 中文API合集 最终版,androi中文api合集.doc

    androi中文api合集 HYPERLINK "/over140/archive/2011/01/04/1925146.html" Android 中文API合集(3)(83篇) ...

  8. Android KTX 和 Kotlin android extension对比

    参考: KTX 和 Kotlin android extension 都到底是个啥? Android KTX KTX 是被称为Android之光的 JakeWharton 写的 Android KTX ...

  9. android耳机音量代码,Android链接耳机音量到主音量

    据我所知,这是飞利浦Android TV用户的常见问题(例如 this篇中的第22页,或 that讨论). 一般来说,您的任务的模板是跟踪插入/拔出事件和"系统/音乐"音频流(或媒 ...

最新文章

  1. 开启进度比的文本为什么没有显示_没有开通智钻,为什么会显示流量是在智钻进店的呢?...
  2. Java 链表数据修改
  3. openGL es实现小实例
  4. JAVA项目中找不到tomcat_Tomcat启动过程中找不到JAVA_HOME解决方法
  5. html底部弹出选择,jQuery手机端底部弹出菜单列表特效代码
  6. python logger filter_使用Filter过滤python中的日志输出的实现方法
  7. java数组实现队列
  8. 四川电信在广元市建大数据中心
  9. php 导出文件另行指定路径,生成excel文件到指定目录的函数php类库
  10. 灰色系统理论及其应用 (四) :灰色模型 GM
  11. 计算有向图的可达矩阵的算法及其MATLAB实现
  12. 孙子兵法——精华摘录
  13. 树莓派智能语音机器人
  14. Zabbix5.0前端个性化设置,手把手教你定制Logo
  15. 汉语拼音的36个韵母该怎么学?
  16. Jenkins首次安装选择推荐插件时出现“: No such plugin: cloudbees-folder” 解决方案
  17. java内部类的作用分析
  18. shell 批量 ping 多个IP地址
  19. 100块钱买100只鸡的故事
  20. Git 储藏(stash)详解

热门文章

  1. Yocto系列讲解[实战篇]85 - 制作ubi镜像和自动挂载ubifs文件系统
  2. windows server 2008 R2软件分发
  3. 计算机中的word,word2012
  4. 长沙亚信科技Java实习面经
  5. 虚拟机Centos 7 使用命令 ip addr 不显示IP地址
  6. java判断日期大小,大于等于,小于等于
  7. MATLAB中果蝇味道浓度判定函数,果蝇优化算法的分析.PDF
  8. Android4.2.2 Gallery2源码分析(4)——GLCanvas.java
  9. 并发编程笔记,带你降服面试官
  10. 五子棋小游戏基于C++语言