Lottie——强大的动画渲染框架

概述

Airbnb开源的强大的动画框架,适用于Android,IOS,React Native和Web。可以使用AE导出的JSON格式的动画,并解析为原生动画效果。

特点:
跨平台 —— 一份动画效果,多平台通用。
多种方式导入动画效果 —— 可从assets,sdcard,网络加载动画资源,支持动态更新。

原生实现
之前在Android中要实现相对复杂的动画效果一般有三种方式:
1.帧动画,在程序中添加N张动画图片,通过帧动画实现动画效果,缺点是图片太多导致apk过大。
2.Gif,使用动画gif实现动画效果,但是android原生对gif支持不好,而且比较占用系统资源,在低性能设备上效果较差。
3.通过自定义控件和图片实现,通过复杂的动画实现逻辑,实现效果。缺点实现方式繁琐,代码封装性通常不好,动画效果稍微变更,就需要大量的修改实现逻辑。

优势
Lottie相对于原生的动画实现方式的优势:
1.需要很少的图片资源就可以实现复杂的动画效果,甚至不需要图片资源。
2.平台兼容性好,不需要做平台和分辨率的适配工作。
3.可以很方便的加载动画文件,甚至可以实现动态更新。
4.只需要从AE导出动画Json文件即可实现动画效果,极大的减少了开发的工作量。

Lottie在Android的使用

GitHub和官方文档

GitHub:https://github.com/airbnb/lottie-android
官方文档:http://airbnb.io/lottie/#/android
动画广场:https://lottiefiles.com/marketplace/animators?page=1
众多动画师开源了大量的动画效果。

添加依赖

dependencies {
  implementation 'com.airbnb.android:lottie:$lottieVersion'
}

lottieVersion版本以官网和GitHub上发布的版本为准,需要注意的是:

Lottie 2.8.0 and above only supports projects that have been migrated to androidx. For more information, read Google's migration guide.

2.8.0及更高版本只支持配合androidx使用。

核心类

  • LottieAnimationView extends ImageView and is the default and simplest way to load a Lottie animation.
  • LottieDrawable has most of the same APIs as LottieAnimationView but you can use it on any View you want.
  • LottieComposition is the stateless model repesentation of an animation. You can create one with LottieCompositionFactory and set it on a LottieDrawable or LottieAnimationView.

简单总结一下就是:
LottieAnimationView 继承ImageView封装了一下播放Lottie动画的方法,可以简便的实现Lottie动画效果。
LottieDrawable Lottie动画的Drawable封装类,可以在需要播放动画的View上使用。
LottieComposition 可以简单理解为Lottie Json文件对应的实体类。
LottieCompositionFactory Lottie对象的工厂类,用于构建Lottie对象。可以从assets、sdcard和网络加载json文件、json zip和json String等数据构建Lottie对象。

使用

XML

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/lottie_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn5"
        app:lottie_autoPlay="true"
        //设置assets文件夹位置,默认assets根目录
        app:lottie_imageAssetsFolder="lottie/"
        //从src/main/assets中加载动画文件
        app:lottie_fileName="test.json"
        app:lottie_loop="true"
        //从src/main/res/raw中加载动画文件
        app:lottie_rawRes="@raw/test"
        //从网络连接中加载动画文件
        app:lottie_url="https://assets7.lottiefiles.com/packages/lf20_Hy2FuX.json" />

Lottie中针对从网络链接获取动画文件做了封装,可以很方便的从网络加载动画效果。

代码

LottieAnimationView的使用:

//设置assets文件目录
lottieAnimationView.setImageAssetsFolder("lottie");
//设置assets下的动画文件
lottieAnimationView.setAnimation("test.json");
//设置网络url
lottieAnimationView.setAnimationFromUrl("https://assets7.lottiefiles.com/packages/lf20_Hy2FuX.json");
//开始播放
lottieAnimationView.playAnimation();

设置动画监听:

lottieAnimationView.addAnimatorListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        
    }

    @Override
    public void onAnimationEnd(Animator animation) {

    }

    @Override
    public void onAnimationCancel(Animator animation) {

    }

    @Override
    public void onAnimationRepeat(Animator animation) {

    }
});

lottieAnimationView.addAnimatorUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        
    }
});

LottieCompositionFactory和LottieDrawable就不展开讲了使用都比较简单,看API文档基本都能理解。
详细使用看官方介绍:http://airbnb.io/lottie/#/android

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351