Lottie與SvgaPlayer的一些簡(jiǎn)單使用,以及使用lottie做一個(gè)簡(jiǎn)單的tab切換時(shí)圖標(biāo)動(dòng)畫(huà)

最近閑來(lái)無(wú)事埃疫,看到別的App有不少炫酷的動(dòng)畫(huà)伏恐,特地逆向研究了一番,大致看到兩類栓霜,一種是lottie開(kāi)發(fā)的翠桦,一種是SVGA實(shí)現(xiàn)的。
大致效果如下:

lottie

lottie

SVGA

這兩種動(dòng)畫(huà)實(shí)現(xiàn)極大的簡(jiǎn)化開(kāi)發(fā)人員的工作量胳蛮,但是需要有一個(gè)好的設(shè)計(jì)師销凑,至少會(huì)入門(mén)AE AI AN 。
在使用場(chǎng)景方面lottie主要是一些加載動(dòng)畫(huà)仅炊,引導(dǎo)頁(yè)動(dòng)畫(huà)底部icon切換動(dòng)畫(huà)等一些輕量級(jí)動(dòng)畫(huà)斗幼,而svga主要是一些主播中的打賞動(dòng)畫(huà),就像官方放出的送一個(gè)飛機(jī)火箭等執(zhí)行的一些動(dòng)畫(huà)抚垄。
功能性方面?zhèn)€人比較推薦lottie蜕窿,一方面是他的設(shè)計(jì)種類多,他的lottie動(dòng)畫(huà)網(wǎng)站有大量的開(kāi)放性設(shè)計(jì)提供使用呆馁,就算沒(méi)有設(shè)計(jì)師桐经,開(kāi)發(fā)者也可以下載一些上面提供的素材做一部分炫酷的動(dòng)畫(huà),另一方面是他官方app可以對(duì)做出來(lái)的動(dòng)畫(huà)進(jìn)行調(diào)試浙滤,能對(duì)播放速度阴挣,動(dòng)畫(huà)大小,背景色及播放長(zhǎng)度進(jìn)行自定義纺腊,可擴(kuò)展性更高一級(jí)屯吊。

1、lottie的動(dòng)畫(huà)使用:

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

新版lottie已經(jīng)適配了androidx摹菠,如果不想適配androidx的同學(xué)可以使用早一些的版本。

布局文件使用:

<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 參數(shù)為動(dòng)畫(huà)資源骗爆,放在assets目錄下次氨,格式為json文件,導(dǎo)出json的AE格式后續(xù)會(huì)提到
app:lottie_loop 是否循環(huán)播放
app:lottie_autoPlay 是否自動(dòng)播放
app:lottie_colorFilter 設(shè)置顏色
app:lottie_renderMode 渲染模式
app:lottie_speed 設(shè)置播放速度
app:lottie_url 設(shè)置url

渲染模式 主要分為以下三種

AUTOMATIC 自動(dòng)模式
HARDWARE 硬件加速模式
SOFTWARE 軟件加速加速模式

也可以使用lottieAnimationView.setMinFrame與lottieAnimationView.setMaxFrame來(lái)設(shè)置動(dòng)畫(huà)執(zhí)行的最小與最大幀摘投,這樣可以實(shí)現(xiàn)引導(dǎo)頁(yè)的動(dòng)畫(huà)執(zhí)行順序與暫停等煮寡。

如果動(dòng)畫(huà)所在頁(yè)面滑動(dòng)不流暢,可以設(shè)置這三種模式中的一種來(lái)調(diào)試動(dòng)畫(huà)犀呼。我使用的SOFTWARE模式在絕大部分機(jī)型上都沒(méi)有卡頓現(xiàn)象幸撕,但使用HARDWARE模式,有一些復(fù)雜動(dòng)畫(huà)在執(zhí)行的時(shí)候會(huì)出現(xiàn)滑動(dòng)列表不流暢等性能問(wèn)題外臂。調(diào)試動(dòng)畫(huà)的幀率可以使用官方app查看坐儿。

代碼中可以設(shè)置動(dòng)畫(huà)監(jiān)聽(tīng),在不同的動(dòng)畫(huà)狀態(tài)搞事:

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

如果想使用常駐動(dòng)畫(huà),可以設(shè)置緩存強(qiáng)引用 animationView.setAnimation("data.json", LottieAnimationView.CacheStrategy.Strong);

其中CacheStrategy的值可以是Strong,Weak或者None,它們用來(lái)決定LottieAnimationView對(duì)已經(jīng)加載并轉(zhuǎn)換好的動(dòng)畫(huà)持有怎樣形式的引用(強(qiáng)引用/弱引用)貌矿。

有的同學(xué)也會(huì)看到別的app為何有json文件和圖片文件2種呢炭菌?json中還使用到了那種圖片,單獨(dú)設(shè)置lottie_fileName肯定是不行的逛漫,運(yùn)行會(huì)出問(wèn)題黑低,結(jié)構(gòu)目錄如下:


assets文件下目錄

json文件中的結(jié)構(gòu)

你需要添加app:lottie_imageAssetsFolder="images/"來(lái)給lottie設(shè)置文件夾,這樣動(dòng)畫(huà)就會(huì)找到資源圖片酌毡。

2克握、SVGA的動(dòng)畫(huà)使用:

工程gradle中添加

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

app的gradle中添加

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

SVGAPlayer也可以從本地 assets 目錄,或者遠(yuǎn)端服務(wù)器上加載動(dòng)畫(huà)文件枷踏。

<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 文件的路徑菩暗,提供一個(gè)在 assets 目錄下的文件名,或者提供一個(gè) http url 地址
autoPlay: Boolean 默認(rèn)為 true呕寝,當(dāng)動(dòng)畫(huà)加載完成后勋眯,自動(dòng)播放
loopCount: Int 默認(rèn)為 0,設(shè)置動(dòng)畫(huà)的循環(huán)次數(shù)下梢,0 表示無(wú)限循環(huán)
clearsAfterStop: Boolean 默認(rèn)為 true客蹋,當(dāng)動(dòng)畫(huà)播放完成后,是否清空畫(huà)布
fillMode: String 默認(rèn)為 Forward孽江,可以是 Forward讶坯、 BackwardForward 表示動(dòng)畫(huà)結(jié)束后岗屏,將停留在最后一幀Backward 表示動(dòng)畫(huà)結(jié)束后辆琅,將停留在第一幀。

緩存

SVGAParser 不會(huì)管理緩存这刷,你需要自行實(shí)現(xiàn)緩存器婉烟。

設(shè)置 HttpResponseCache

SVGAParser 依賴 URLConnection, URLConnection 使用 HttpResponseCache 處理緩存。
添加代碼至 Application.java:onCreate 以設(shè)置緩存暇屋。

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

想了解詳細(xì)的Api可查看官方的提供的https://github.com/yyued/SVGAPlayer-Android/wiki/APIs

最后附上我做的一個(gè)動(dòng)畫(huà)gif似袁,自然里面的資源都是來(lái)自網(wǎng)上或其他app的僅供學(xué)習(xí)研究:

效果圖

以上開(kāi)發(fā)人員可以實(shí)現(xiàn)自己的炫酷動(dòng)畫(huà)了,自然如果需要一些引導(dǎo)頁(yè)的炫酷動(dòng)畫(huà)咐刨,只能求設(shè)計(jì)師做了昙衅,畢竟程序員本職工作還是寫(xiě)代碼。

圖片源自svga官網(wǎng)設(shè)計(jì)師工具區(qū)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末定鸟,一起剝皮案震驚了整個(gè)濱河市而涉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌联予,老刑警劉巖啼县,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件材原,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谭羔,警方通過(guò)查閱死者的電腦和手機(jī)华糖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘟裸,“玉大人客叉,你說(shuō)我怎么就攤上這事』案妫” “怎么了兼搏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沙郭。 經(jīng)常有香客問(wèn)我佛呻,道長(zhǎng),這世上最難降的妖魔是什么病线? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任吓著,我火速辦了婚禮,結(jié)果婚禮上送挑,老公的妹妹穿的比我還像新娘绑莺。我一直安慰自己,他們只是感情好惕耕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布纺裁。 她就那樣靜靜地躺著,像睡著了一般司澎。 火紅的嫁衣襯著肌膚如雪欺缘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天挤安,我揣著相機(jī)與錄音谚殊,去河邊找鬼。 笑死蛤铜,一個(gè)胖子當(dāng)著我的面吹牛络凿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昂羡,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摔踱!你這毒婦竟也來(lái)了虐先?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤派敷,失蹤者是張志新(化名)和其女友劉穎蛹批,沒(méi)想到半個(gè)月后撰洗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腐芍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年差导,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪勇。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡设褐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泣刹,到底是詐尸還是另有隱情助析,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布椅您,位于F島的核電站外冀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掀泳。R本人自食惡果不足惜雪隧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望员舵。 院中可真熱鬧脑沿,春花似錦、人聲如沸固灵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巫玻。三九已至丛忆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仍秤,已是汗流浹背熄诡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诗力,地道東北人凰浮。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苇本,于是被迫代替她去往敵國(guó)和親袜茧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355