Lottie与SvgaPlayer的一些简单使用,以及使用lottie做一个简单的tab切换时图标动画

最近闲来无事,看到别的App有不少炫酷的动画,特地逆向研究了一番,大致看到两类,一种是lottie开发的,一种是SVGA实现的。
大致效果如下:

lottie

lottie

SVGA

这两种动画实现极大的简化开发人员的工作量,但是需要有一个好的设计师,至少会入门AE AI AN 。
在使用场景方面lottie主要是一些加载动画,引导页动画底部icon切换动画等一些轻量级动画,而svga主要是一些主播中的打赏动画,就像官方放出的送一个飞机火箭等执行的一些动画。
功能性方面个人比较推荐lottie,一方面是他的设计种类多,他的lottie动画网站有大量的开放性设计提供使用,就算没有设计师,开发者也可以下载一些上面提供的素材做一部分炫酷的动画,另一方面是他官方app可以对做出来的动画进行调试,能对播放速度,动画大小,背景色及播放长度进行自定义,可扩展性更高一级。

1、lottie的动画使用:

implementation 'com.airbnb.android:lottie:3.0.6'

新版lottie已经适配了androidx,如果不想适配androidx的同学可以使用早一些的版本。

布局文件使用:

<com.airbnb.lottie.LottieAnimationView
        android:id="@+id/lottieAnimationView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appCompatImageView"
        app:lottie_fileName="data.json"
        app:lottie_loop="true"
        app:lottie_autoPlay="true"
        app:lottie_colorFilter="@color/colorAccent"
        app:lottie_renderMode="automatic"
        />
属性 作用
app:lottie_fileName 参数为动画资源,放在assets目录下,格式为json文件,导出json的AE格式后续会提到
app:lottie_loop 是否循环播放
app:lottie_autoPlay 是否自动播放
app:lottie_colorFilter 设置颜色
app:lottie_renderMode 渲染模式
app:lottie_speed 设置播放速度
app:lottie_url 设置url

渲染模式 主要分为以下三种

AUTOMATIC 自动模式
HARDWARE 硬件加速模式
SOFTWARE 软件加速加速模式

也可以使用lottieAnimationView.setMinFrame与lottieAnimationView.setMaxFrame来设置动画执行的最小与最大帧,这样可以实现引导页的动画执行顺序与暂停等。

如果动画所在页面滑动不流畅,可以设置这三种模式中的一种来调试动画。我使用的SOFTWARE模式在绝大部分机型上都没有卡顿现象,但使用HARDWARE模式,有一些复杂动画在执行的时候会出现滑动列表不流畅等性能问题。调试动画的帧率可以使用官方app查看。

代码中可以设置动画监听,在不同的动画状态搞事:

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) {
            }
        });

如果想使用常驻动画,可以设置缓存强引用 animationView.setAnimation("data.json", LottieAnimationView.CacheStrategy.Strong);

其中CacheStrategy的值可以是Strong,Weak或者None,它们用来决定LottieAnimationView对已经加载并转换好的动画持有怎样形式的引用(强引用/弱引用)。

有的同学也会看到别的app为何有json文件和图片文件2种呢?json中还使用到了那种图片,单独设置lottie_fileName肯定是不行的,运行会出问题,结构目录如下:


assets文件下目录

json文件中的结构

你需要添加app:lottie_imageAssetsFolder="images/"来给lottie设置文件夹,这样动画就会找到资源图片。

2、SVGA的动画使用:

工程gradle中添加

allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

app的gradle中添加

compile 'com.github.yyued:SVGAPlayer-Android:2.4.4'

SVGAPlayer也可以从本地 assets 目录,或者远端服务器上加载动画文件。

<com.opensource.svgaplayer.SVGAImageView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:source="posche.svga"
        app:autoPlay="true"
        android:background="#000" />
属性 作用
source: String 用于表示 svga 文件的路径,提供一个在 assets 目录下的文件名,或者提供一个 http url 地址
autoPlay: Boolean 默认为 true,当动画加载完成后,自动播放
loopCount: Int 默认为 0,设置动画的循环次数,0 表示无限循环
clearsAfterStop: Boolean 默认为 true,当动画播放完成后,是否清空画布
fillMode: String 默认为 Forward,可以是 ForwardBackwardForward 表示动画结束后,将停留在最后一帧Backward 表示动画结束后,将停留在第一帧。

缓存

SVGAParser 不会管理缓存,你需要自行实现缓存器。

设置 HttpResponseCache

SVGAParser 依赖 URLConnection, URLConnection 使用 HttpResponseCache 处理缓存。
添加代码至 Application.java:onCreate 以设置缓存。

val cacheDir = File(context.applicationContext.cacheDir, "http")
HttpResponseCache.install(cacheDir, 1024 * 1024 * 128)

想了解详细的Api可查看官方的提供的https://github.com/yyued/SVGAPlayer-Android/wiki/APIs

最后附上我做的一个动画gif,自然里面的资源都是来自网上或其他app的仅供学习研究:

效果图

以上开发人员可以实现自己的炫酷动画了,自然如果需要一些引导页的炫酷动画,只能求设计师做了,毕竟程序员本职工作还是写代码。

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