Lottie- 讓Android動(dòng)畫實(shí)現(xiàn)更簡(jiǎn)單

Lottie是什么?

Lottie是Airbnb開源的一個(gè)支持 Android、iOS 以及 ReactNative,利用json文件的方式快速實(shí)現(xiàn)動(dòng)畫效果的庫(kù)。這么看可能很難理解,接下來(lái)我將詳細(xì)的講解如何使用。
Lottie項(xiàng)目地址:https://github.com/airbnb/lottie-android


首先先無(wú)恥的把我自己寫的demo程序和源碼放上來(lái)。

Lottie如何使用?

一、Lottie能干什么?

在回答Lottie能干什么之前,我們先想下如下的動(dòng)畫如何實(shí)現(xiàn)?

如何實(shí)現(xiàn)上方的動(dòng)畫效果?

我想大概有幾種方式:
使用幀動(dòng)畫。這種方式固然可行,但是一個(gè)需要?jiǎng)赢嬏砑雍芏鄰垐D片,勢(shì)必會(huì)導(dǎo)致apk體積變大,并且還要根據(jù)不同的尺寸進(jìn)行適配。

  • 用 Gif。但是使用 Gif 占用空間較大,而且需要為各種屏幕尺寸、分辨率做適配,并且Android本是不支持gif直接展示的。
  • 用代碼加圖片輔助。如之前寫的 仿照駕校一點(diǎn)通歡迎頁(yè),這種方式繁瑣并且每更新一次都需要重新寫很多代碼。
  • Android 5.x 之后提供了對(duì) SVG 的支持,通過(guò) VectorDrawable、AnimatedVectorDrawable 的結(jié)合可以實(shí)現(xiàn)一些稍微復(fù)雜的動(dòng)畫,但是問(wèn)題和前2個(gè)類似。

那么有沒有什么方式是即可以方便的實(shí)現(xiàn)動(dòng)畫效果,又可以不用考慮適配的問(wèn)題,而且Android、ios還可以兼容呢?

Lottie就是支持Android, iOS, 和React Native,并且只需簡(jiǎn)單的代碼就可以實(shí)現(xiàn)復(fù)雜動(dòng)畫效果的庫(kù)

二、Lottie在Android端怎么用?

假設(shè)我們要做一個(gè)緩沖數(shù)據(jù)時(shí)的一個(gè)loading動(dòng)畫,不用Lottie之前你們公司的美工一般都會(huì)給一個(gè)gif動(dòng)畫效果和一些切好的一幀一幀的圖片?,F(xiàn)在不需要這么操作了,只要你們公司的美工做如下的操作:

下面是公司帥帥的美工的工作
  1. 讓設(shè)計(jì)師使用Adobe 的 After Effects(簡(jiǎn)稱 AE)工具(美工一般都會(huì)這個(gè))制作這個(gè)動(dòng)畫。
    AE的下載地址:鏈接: http://pan.baidu.com/s/1misKrzU 密碼:f2t7 (安裝破解什么的就自行百度吧)
  2. 在AE中安裝一個(gè)叫做Bodymovin的插件。
    下載 bodymovin,解壓縮后只需要\build\extension\bodymovin.zxp這個(gè)檔案就可以
    1478641334-9003-svgani1

    3.手動(dòng)安裝plugin,以windows系統(tǒng)而言,要先下載 **ExMan Command Line tool **并解壓縮。
    再來(lái)把下載的bodymovin壓縮后的 bodymovin-master\build\extension 目錄下的bodymovin.zxp 這個(gè)檔案復(fù)制進(jìn)去同一個(gè)資料夾。
    1478641336-7754-svgani3

4.去找cmd,并以系統(tǒng)管理員身分執(zhí)行。

5.打“cd C:/ExManCmd_win 所在的路徑 “,進(jìn)入ExManCmd的資料夾中

6.接著打 ExManCmd.exe /install bodymovin.zxp 就完成了

7.再來(lái)進(jìn)入AE 后,可以在windows/extentions/bodymovin 找到插件,開啟后按下Render 就完成了。 重點(diǎn)來(lái)了,這時(shí)會(huì)在你選的Destination Folder目錄中生成一個(gè)json格式的文件,這個(gè) json 文件描述了該動(dòng)畫的一些關(guān)鍵點(diǎn)的坐標(biāo)以及運(yùn)動(dòng)軌跡。請(qǐng)帥帥的美工把這個(gè)文件發(fā)給你苦逼的程序員兄弟吧!


下面就是苦逼Android程序員應(yīng)該如何做咯

1.在build.gradle中添加

dependencies {  
  compile 'com.airbnb.android:lottie:1.0.1'
}

2.layout文件中添加

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/animation_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:lottie_fileName="hello-world.json"
        app:lottie_loop="true"
        app:lottie_autoPlay="true" />

3.將帥帥的美工給你的json文件重命名為xml中l(wèi)ottie_fileName的值,如上就是hello-world.json。將hello-world.json放入 app/src/main/assets目錄中。打包吧??!

然后你就會(huì)發(fā)現(xiàn)奇跡出現(xiàn)了,沒有一張圖片,沒有一個(gè)gif,但是動(dòng)畫效果出來(lái)了!就是這么簡(jiǎn)單,就是這么暴力!


三、Lottie進(jìn)階,如何更加高效和方便的實(shí)用?

1.最簡(jiǎn)單的使用方式就是上方直接在xml中定義的方式。
2.使用代碼的方式,支持從assets目錄中直接讀取json文件、json字符串的方式、stream流的方式等

Paste_Image.png

3.從網(wǎng)絡(luò)獲取json文件,直接顯示動(dòng)畫。這種方式很炫,你就可以不用不更新apk就不動(dòng)聲色的定期更新你的動(dòng)畫了。
下方是我寫的一個(gè)小demo,使用okhttp訪問(wèn)網(wǎng)絡(luò)上一段json文件,然后顯示動(dòng)畫。

client.newCall(request).enqueue(new Callback() {
            @Override public void onFailure(Call call, IOException e) {

            }

            @Override public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) {
                }

                try {
                    JSONObject json = new JSONObject(response.body().string());
                    LottieComposition.fromJson(getResources(), json, new LottieComposition.OnCompositionLoadedListener() {
                                @Override
                                public void onCompositionLoaded(LottieComposition composition) {
                                    setComposition(composition);
                                }
                            });
                } catch (JSONException e) {
                }
            }
        });
四、Lottie例子程序

為了更好的讓你了解這個(gè)庫(kù),我寫了一個(gè)簡(jiǎn)單的demo,請(qǐng)大家?guī)兔c(diǎn)star !


感激

感謝以下文章:
這個(gè)項(xiàng)目碉堡了
After Effect 轉(zhuǎn)svg 動(dòng)畫– 神奇的bodymovin 插件

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評(píng)論 25 709
  • 碉堡的Lottie Airbnb最近開源了一個(gè)名叫Lottie的動(dòng)畫庫(kù),它能夠同時(shí)支持iOS,Android與Re...
    Trojx閱讀 104,881評(píng)論 44 417
  • 在九月 我們的又一次相遇 面對(duì)選擇 誰(shuí)也沒有伸手挽留 是對(duì)?是錯(cuò)? 云笑我固執(zhí) 風(fēng)讓我做自己 雨肆意傾落 打濕耷拉...
    叫不醒我噠閱讀 313評(píng)論 0 0
  • 痛文/紅葉微語(yǔ) 風(fēng)起時(shí)我們笑著看云風(fēng)停了我們卻各奔東西愛你原來(lái)是這樣的痛苦之極 堅(jiān)持原創(chuàng),轉(zhuǎn)載請(qǐng)聯(lián)系本人,謝謝!
    珠海紅葉原創(chuàng)閱讀 289評(píng)論 1 3
  • 從做平面方案到今天,已經(jīng)是第12天左右,今天終于把樓梯敲掉,露出空間本來(lái)面目,我該怎樣為他量體裁“衣”?
    徐靜_d1ae閱讀 150評(píng)論 0 0

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