Android Lottie實現(xiàn)中秋月餅變明月動畫特效實例
前言
小菜在 Android 端進行動畫處理時主要用的是 Android 自帶的三種動畫形式,今天小菜簡單嘗試通過 Airbnb Lottie 展示一個中秋月餅變明月的小動畫;
Lottie
Lottie 動畫是 Airbnb 開源的一套多平臺兼容的動畫形式,小菜之前簡單嘗試過 Flutter 版本,使用非常便捷,今天小菜簡單了解一下 Android 版本;
案例嘗試
1. 集成依賴
在 build.gradle 中集成最新版本的 Lottie 依賴并同步;
api 'com.airbnb.android:lottie:4.1.0'
2. 添加 LottieAnimationView 加載網(wǎng)絡(luò)資源
首先在 xml 文件中添加 LottieAnimationView,之后通過 setAnimationFromUrl() 加載網(wǎng)絡(luò)資源;其中加載網(wǎng)絡(luò)圖片時有兩個重載方法,其中 cacheKey 為緩存策略;加載完網(wǎng)絡(luò)資源之后還需要 playAnimation( 啟動動畫;
<com.airbnb.lottie.LottieAnimationView android:id="@+id/lottie_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> mView = (LottieAnimationView) this.findViewById(R.id.lottie_view); mView.setAnimationFromUrl("https://assets6.lottiefiles.com/packages/lf20_Tprkoc.json"); mView.playAnimation();
3. 加載本地資源
當 LottieAnimationView 加載本地資源時,需要先下載生成的 json 文件,并添加到工程中,通過 setAnimation() 引入本地資源;其中 setAnimation() 也有多個重載方法,可以靈活應(yīng)用;
mView2 = (LottieAnimationView) this.findViewById(R.id.lottie_view2); mView2.setAnimation("mooncake.json"); mView2.playAnimation();
4. 循環(huán)播放 & 動畫監(jiān)聽
前兩步設(shè)置完 setAnimation() 之后,播放完成就停止動畫,若需要重復(fù)播放,可以通過 loop(true) 方式進行循環(huán)播放,但該方法在新的 API 中不建議使用,可以通過 setRepeatCount() 設(shè)置播放次數(shù),或通過動畫監(jiān)聽在動畫結(jié)束時再次播放等;
mView2.loop(true); mView1.setRepeatCount(5);
可以通過 addAnimatorListener() 進行動畫監(jiān)聽;其中當設(shè)置 **** 播放次數(shù)后,每次播放均會調(diào)用 onAnimationRepeat() 回調(diào),播放結(jié)束之后才會調(diào)用 onAnimationEnd();而如果不設(shè)置播放次數(shù)時,不會進入 onAnimationRepeat() 回調(diào);
mView2.addAnimatorListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { Log.e(TAG, "-> onAnimationStart()"); } @Override public void onAnimationEnd(Animator animator) { Log.e(TAG, "-> onAnimationEnd()"); } @Override public void onAnimationCancel(Animator animator) { Log.e(TAG, "-> onAnimationCancel()"); } @Override public void onAnimationRepeat(Animator animator) { Log.e(TAG, "-> onAnimationRepeat()"); } });
5. 暫停 & 繼續(xù) & 取消
小菜通過 playAnimation() 使動畫進行播放;而 Lottie 也提供了 pauseAnimation() 暫停動畫;resumeAnimation() 暫停后繼續(xù)播放以及 cancelAnimation() 取消動畫等方法;
其中調(diào)用 playAnimation() 時會從動畫起始位置播放,而 resumeAnimation() 會從暫?;蛉∠麆赢嬐V刮恢貌シ?;pauseAnimation() 和 cancelAnimation() 均會停止動畫,但 cancelAnimation() 停止后會 lottieDrawable.cancelAnimation() 清空動畫 Drawable,且會在 onAnimationCancel() 監(jiān)聽中進行回調(diào);
@Override public void onClick(View view) { switch (view.getId()){ case R.id.main_btn1: mView2.playAnimation(); break; case R.id.main_btn2: mView2.pauseAnimation(); break; case R.id.main_btn3: mView2.resumeAnimation(); break; case R.id.main_btn4: mView2.cancelAnimation(); break; } }
小擴展
1. 硬件加速器
小菜在使用 Lottie 時建議開啟硬件加速器,降低動畫幀率,避免卡頓;
android:hardwareAccelerated="true"
2. json 文件解析
小菜之前覺得 Lottie 的 json 文件是一個很神奇很復(fù)雜的天書,今天小菜簡單介紹一下其中屬性對應(yīng)關(guān)系;
整體結(jié)構(gòu)包括如下幾個部分:v 為對應(yīng) bodymovin 動畫版本;fr 為幀率;ip / op 分別對應(yīng)起始/結(jié)束關(guān)鍵幀;w / h 為動畫寬高;assets 為資源信息,包括 Drawable 等;layers 為圖層信息;
asstes 中 w / h 為資源寬高;u / p 非別對應(yīng)資源露肩和名稱;其中的 layers 也為圖層信息;layers 中的 ks 為動畫的主要信息;
小菜理解 Lottie 整體是利用屬性動畫控制進度,通過進度變更更改 layers 中觸發(fā) LottieAnimationView 重繪各個資源信息;
總結(jié)
到此這篇關(guān)于Android Lottie實現(xiàn)中秋月餅變明月動畫特效的文章就介紹到這了,更多相關(guān)Android Lottie動畫特效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
app 請求服務(wù)器json數(shù)據(jù)實例代碼
下面小編就為大家分享一篇app 請求服務(wù)器json數(shù)據(jù)實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android App中使用LinearLayout進行居中布局的實例講解
這篇文章主要介紹了Android App中使用LinearLayout進行居中布局的實例講解,文中分別介紹了水平居中和垂直居中的相關(guān)線性布局,需要的朋友可以參考下2016-04-04Android?Fragment實現(xiàn)頂部、底部導(dǎo)航欄
這篇文章主要為大家詳細介紹了Android?Fragment實現(xiàn)頂部、底部導(dǎo)航欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09詳解android在mob平臺實現(xiàn)qq登陸和分享
這篇文章主要介紹了詳解android在mob平臺實現(xiàn)qq登陸和分享,對接入第三方平臺SDK感興趣的同學們,可以參考下2021-04-04Android實現(xiàn)點匯聚成字的動態(tài)效果詳解
在引入?fl_chart?繪制圖表的時候,看到插件有下面這樣的動效,隨機散亂的圓點最后組合成了?Flutter?的?Logo,挺酷炫的。本篇我們來探討類似的效果怎么實現(xiàn)2022-07-07android Tween Animation屬性設(shè)置方法實例
在Android開發(fā)中,Animation是用來給控件制作效果的,本文介紹二種實現(xiàn)方法2013-11-11Input系統(tǒng)之InputReader處理按鍵事件詳解
這篇文章主要為大家介紹了Input系統(tǒng)之InputReader處理按鍵事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11