Lottie與SvgaPlayer的一些簡單使用,以及使用lottie做一個簡單的tab切換時圖標動畫

最近閑來無事,看到別的App有不少炫酷的動畫,特地逆向研究了一番,大致看到兩類,一種是lottie開發(fā)的,一種是SVGA實現(xiàn)的。
大致效果如下:

lottie

lottie

SVGA

這兩種動畫實現(xiàn)極大的簡化開發(fā)人員的工作量,但是需要有一個好的設計師,至少會入門AE AI AN 。
在使用場景方面lottie主要是一些加載動畫,引導頁動畫底部icon切換動畫等一些輕量級動畫,而svga主要是一些主播中的打賞動畫,就像官方放出的送一個飛機火箭等執(zhí)行的一些動畫。
功能性方面?zhèn)€人比較推薦lottie,一方面是他的設計種類多,他的lottie動畫網(wǎng)站有大量的開放性設計提供使用,就算沒有設計師,開發(fā)者也可以下載一些上面提供的素材做一部分炫酷的動畫,另一方面是他官方app可以對做出來的動畫進行調(diào)試,能對播放速度,動畫大小,背景色及播放長度進行自定義,可擴展性更高一級。

1、lottie的動畫使用:

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

新版lottie已經(jīng)適配了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 參數(shù)為動畫資源,放在assets目錄下,格式為json文件,導出json的AE格式后續(xù)會提到
app:lottie_loop 是否循環(huán)播放
app:lottie_autoPlay 是否自動播放
app:lottie_colorFilter 設置顏色
app:lottie_renderMode 渲染模式
app:lottie_speed 設置播放速度
app:lottie_url 設置url

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

AUTOMATIC 自動模式
HARDWARE 硬件加速模式
SOFTWARE 軟件加速加速模式

也可以使用lottieAnimationView.setMinFrame與lottieAnimationView.setMaxFrame來設置動畫執(zhí)行的最小與最大幀,這樣可以實現(xiàn)引導頁的動畫執(zhí)行順序與暫停等。

如果動畫所在頁面滑動不流暢,可以設置這三種模式中的一種來調(diào)試動畫。我使用的SOFTWARE模式在絕大部分機型上都沒有卡頓現(xiàn)象,但使用HARDWARE模式,有一些復雜動畫在執(zhí)行的時候會出現(xiàn)滑動列表不流暢等性能問題。調(diào)試動畫的幀率可以使用官方app查看。

代碼中可以設置動畫監(jiān)聽,在不同的動畫狀態(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) {
            }
        });

如果想使用常駐動畫,可以設置緩存強引用 animationView.setAnimation("data.json", LottieAnimationView.CacheStrategy.Strong);

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

有的同學也會看到別的app為何有json文件和圖片文件2種呢?json中還使用到了那種圖片,單獨設置lottie_fileName肯定是不行的,運行會出問題,結(jié)構(gòu)目錄如下:


assets文件下目錄

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

你需要添加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,設置動畫的循環(huán)次數(shù),0 表示無限循環(huán)
clearsAfterStop: Boolean 默認為 true,當動畫播放完成后,是否清空畫布
fillMode: String 默認為 Forward,可以是 ForwardBackward。Forward 表示動畫結(jié)束后,將停留在最后一幀Backward 表示動畫結(jié)束后,將停留在第一幀。

緩存

SVGAParser 不會管理緩存,你需要自行實現(xiàn)緩存器。

設置 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,自然里面的資源都是來自網(wǎng)上或其他app的僅供學習研究:

效果圖

以上開發(fā)人員可以實現(xiàn)自己的炫酷動畫了,自然如果需要一些引導頁的炫酷動畫,只能求設計師做了,畢竟程序員本職工作還是寫代碼。

圖片源自svga官網(wǎng)設計師工具區(qū)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容