自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

站在Android開(kāi)發(fā)的角度,聊聊Airbnb的Lottie?。?!

企業(yè)動(dòng)態(tài)
你有沒(méi)有遇上一些設(shè)計(jì)師,對(duì)一些酷炫的動(dòng)畫著迷,喜歡根據(jù)場(chǎng)景設(shè)計(jì)出可愛(ài)而流暢的動(dòng)畫。但是在實(shí)際工作中,哪怕開(kāi)發(fā)人員也覺(jué)得這些動(dòng)畫非常的棒,可我們知道,越是定制化的動(dòng)畫,實(shí)現(xiàn)起來(lái)將會(huì)越麻煩和耗時(shí)。這有時(shí)候就會(huì)引發(fā)設(shè)計(jì)師和工程師的矛盾。

[[213490]]

一、前言

你有沒(méi)有遇上一些設(shè)計(jì)師,對(duì)一些酷炫的動(dòng)畫著迷,喜歡根據(jù)場(chǎng)景設(shè)計(jì)出可愛(ài)而流暢的動(dòng)畫。但是在實(shí)際工作中,哪怕開(kāi)發(fā)人員也覺(jué)得這些動(dòng)畫非常的棒,可我們知道,越是定制化的動(dòng)畫,實(shí)現(xiàn)起來(lái)將會(huì)越麻煩和耗時(shí)。這有時(shí)候就會(huì)引發(fā)設(shè)計(jì)師和工程師的矛盾。

[[213491]]

而自從 Airbnb 開(kāi)發(fā)出 Lottie 之后,設(shè)計(jì)師只需要使用 After Effects 設(shè)計(jì)出***的動(dòng)畫,然后通過(guò) Bodymovin 插件進(jìn)行簡(jiǎn)單的轉(zhuǎn)換和導(dǎo)出成 JSON,***工程師將 JSON 放入 App 項(xiàng)目中,就可以將動(dòng)畫 100% 還原到你的產(chǎn)品中。

二、為什么要用 Lottie?

Lottie 是一套跨平臺(tái)的完整解決方案,設(shè)計(jì)師只需要使用 After Effectes 設(shè)計(jì)出動(dòng)畫之后,使用 Lottic 提供的 Bodymovin 將設(shè)計(jì)好的動(dòng)畫導(dǎo)出成 JSON 格式,就可以直接運(yùn)用在 iOS、Android 和 React Native之上,無(wú)需關(guān)心中間的實(shí)現(xiàn)細(xì)節(jié)。

對(duì)于不同的工作角色,Lottie 給你帶來(lái)的都是更簡(jiǎn)潔的工作流。

  • 如果你是 Designer,你可以充分發(fā)揮你的動(dòng)畫設(shè)計(jì)天分,因?yàn)樗鼈冏罱K會(huì)被 100% 的還原。
  • 如果你是 Engineer,你可以通過(guò)簡(jiǎn)單的導(dǎo)入和有限的代碼,就可以實(shí)現(xiàn)設(shè)計(jì)師要求的動(dòng)畫,并且 Lottie 并不臃腫。
  • 如果你是 Product Manager,你的產(chǎn)品將具有更人性化的酷炫動(dòng)畫,而這并不會(huì)帶來(lái)開(kāi)發(fā)周期的延長(zhǎng)。

整體來(lái)說(shuō),Lottie 是一個(gè)優(yōu)秀的項(xiàng)目,它能解決很多關(guān)于動(dòng)畫上的溝通問(wèn)題和提供解決方案。可它依然有一些不足的地方:

  1. 系統(tǒng)版本限制,Android(Api 14+) 和 iOS(>=8.0) 都有不同的版本限制。
  2. 有一些交互動(dòng)畫,不被支持,哪怕導(dǎo)出了也無(wú)法被正常執(zhí)行。
  3. Bodymovin 插件還有待完善,有些 After Effects 實(shí)現(xiàn)的效果,無(wú)法被正常導(dǎo)出。

而今天,我們站在一個(gè) Android 工程師的角度,來(lái)看看如何使用 Lottie。這里只聊 Android 下使用 Lottie,如何編輯動(dòng)畫,如何安裝插件,這些都是設(shè)計(jì)師需要關(guān)心的,對(duì)我們而言,拿到的就是一個(gè) Lottie 動(dòng)畫的 JSON 文件,我們只需要關(guān)心如何使用它。

三、在 Android 下使用 Lottie

3.1 開(kāi)始使用

Lottie 可以支持并且也是僅支持 Gradle 進(jìn)行構(gòu)建配置,因此,我們只需要在 build.gradle 文件中進(jìn)行簡(jiǎn)單的導(dǎo)入就好了。

最簡(jiǎn)單的使用方式是直接使用 LottieAnimationView ,LottieAnimationView 直接繼承自 AppCompatImageView 。

只需要提前將動(dòng)畫的 JSON 文件,放在 app/src/main/assets 目錄下,在 Layout 布局文件中,可以直接使用。

它支持幾個(gè)屬性:

  • lottie_fileName : 播放動(dòng)畫的 json 文件。
  • lottie_loop:是否循環(huán)播放,默認(rèn)為 false。
  • lottie_autoPlay:是否加載完成之后,自動(dòng)播放,默認(rèn)為 false。

當(dāng)然,你也可以使用邏輯代碼去控制 Lottie 動(dòng)畫的播放,使用起來(lái)也非常的簡(jiǎn)單。

這個(gè)方法會(huì)去加載 JSON 文件,并解析動(dòng)畫,之后在子線程中開(kāi)始異步渲染動(dòng)畫。

3.2 加載其他來(lái)源的 Lottie

我們的 Lottie 動(dòng)畫的 JSON 可以從任何地方加載,這里就需要使用到 LottieComposition.Factory 這個(gè)類去加載不同來(lái)源的 JSON 文件。在這個(gè) Factory 中,提供了很多 fromXxx() 的方法,用于加載動(dòng)畫的 JSON 。

一個(gè)比較常用的方式,例如我們從一個(gè) JSONObject 中,加載 Lottie 動(dòng)畫。

fromXxx() 方法,會(huì)返回一個(gè) Cancellable 接口,標(biāo)識(shí)它是一個(gè)可被取消的方法,如果有需要,可以調(diào)用它的 cancel() 方法。

Lottie 的動(dòng)畫加載器,看著有很多 fromXxx() 方法,其實(shí)最終指向的都是 FileCompositionLoader 和 JsonCompositionLoader ,這兩個(gè)加載器,都是繼承自 AsyncTask 的,所以 cancel() 方法其實(shí)就是取消的這個(gè) AsyncTask 的執(zhí)行,有興趣的可以查閱這方面的源碼。

3.3 Lottie 動(dòng)畫的監(jiān)聽(tīng)

Lottie 作為一個(gè)動(dòng)畫,也是提供了一些監(jiān)聽(tīng)器用于監(jiān)聽(tīng)動(dòng)畫執(zhí)行的情況的。

例如,想要監(jiān)聽(tīng)動(dòng)畫的開(kāi)始結(jié)束等狀態(tài),可以使用 addAnimatorListener() 方法,它接受一個(gè) Animator.AnimatorListener() 接口,我們只需要實(shí)現(xiàn)對(duì)應(yīng)的方法就行了。

而如果我們想要監(jiān)聽(tīng) Lottie 動(dòng)畫的中間狀態(tài),例如執(zhí)行的進(jìn)度等等,可以使用 addAnimatorUpdateListener()。

控制進(jìn)度非常的有用,因?yàn)橛幸恍﹦?dòng)畫,例如就是一個(gè)進(jìn)度條的動(dòng)畫,控制進(jìn)度就顯得非常重要了。

3.4 控制 Lottie 動(dòng)畫執(zhí)行的速度和時(shí)間

Lottie 動(dòng)畫,在導(dǎo)出成 JSON 之后,其實(shí)動(dòng)畫執(zhí)行的速度和時(shí)長(zhǎng),都是已經(jīng)固定了的。所以如果想要修改這兩個(gè)參數(shù),除了麻煩設(shè)計(jì)師使用 After Effects 重新修改之后再導(dǎo)出之外,還可以使用 ValueAniamtor 配合 setProgress() 方法來(lái)實(shí)現(xiàn)。

3.5 直接使用 LottieDrawable

LottieAnimationView 其實(shí)內(nèi)部使用的是 LottieDrawable ,如果有需要你也可以直接使用它。

3.6 動(dòng)畫里有圖片

有時(shí)候,我們的動(dòng)畫不僅僅是畫上去的,還有可能會(huì)使用到一些圖片資源。如果遇到這樣的情況,同時(shí)使用的是本地資源圖片,可以使用 setImageAssetsFolder() 設(shè)置一個(gè) Lottie 動(dòng)畫中使用到的圖片文件夾的相對(duì)路徑,并確保他們和 bodymovin 插件輸出的用到的圖片文件名稱,保持不變。

如果你需要加載圖片,你使用 LottieAnimationView 你可以很省心,不需要額外處理,但是如果你直接使用 LottieDrawable 的話,使用完成之后,需要手動(dòng)調(diào)用 recycleBitmaps() 進(jìn)行資源的回收。

而假如我們需要自己配置圖片的位置,例如是從網(wǎng)絡(luò)中下載的圖片,可以使用一個(gè) ImageAssetDelegate 來(lái)支持。

四、查缺補(bǔ)漏

Lottie 官方提供了一個(gè) App,可以用于加載一個(gè) Lottie 的動(dòng)畫,在排查問(wèn)題方面,非常有用,建議如果使用 Lottie 的話,***安裝把玩一下。Lottie.Apk 需要去 Google Play 上下載,不方便下載的可以在公眾號(hào)回復(fù) "lottieapk",直接下載 Apk 文件。

4.1 性能

既然是動(dòng)畫,肯定有性能的要求。可以借助 Lottie App,來(lái)看看動(dòng)畫執(zhí)行的性能問(wèn)題,直接看效果就好了。

4.2 故障排除

有時(shí)候,設(shè)計(jì)師設(shè)計(jì)的動(dòng)畫,有些效果是無(wú)法被 Lottie 還原的。遇到這樣的情況,可以在代碼中調(diào)用 getWarning() 獲取動(dòng)畫的警告詳細(xì)輸出。

還有一個(gè)方法是直接在官方提供的 Lottie.App 中,去加載設(shè)計(jì)師提供的 JSON 文件,如果出錯(cuò),右上角會(huì)有一個(gè) warning 的標(biāo)記,點(diǎn)擊可以查看到詳情。

五、動(dòng)畫資源

如果你因?yàn)楦鞣N原因,沒(méi)有辦法專門由一個(gè)設(shè)計(jì)師來(lái)為你的 App 定制動(dòng)畫效果,你也可以嘗試找找線上公開(kāi)的一些 Lottie 的動(dòng)畫效果,這里推薦使用 LottieFiles 這個(gè)網(wǎng)站。

LottieFiles:

https://www.lottiefiles.com/

LottieFiles 提供了很多小的動(dòng)畫效果,并且可以直接下載成 JSON ,或者生成二維碼,可供 Lottie App 掃描看效果

LottieFiles 上的效果,雖然非常的好用,唯一的問(wèn)題就是基本上,我們作為工程師是無(wú)法編輯的,所以只能去套用效果。

六、小結(jié)

Android 使用 Lottie 的所有細(xì)節(jié),本文已經(jīng)說(shuō)清楚了,還有細(xì)節(jié)需要了解,就只能閱讀文檔,或者查看官方文檔了。

Lottie Github:

https://github.com/airbnb/lottie-android

Lottie 官方文檔:

http://airbnb.io/lottie/

【本文為51CTO專欄作者“張旸”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-12-15 11:09:05

設(shè)計(jì)師LottieAndroid

2017-02-06 14:40:55

AirbnbLottieGif

2023-02-03 09:52:10

開(kāi)發(fā)者框架GoFrame

2011-06-16 17:49:00

SEO

2011-08-08 09:32:32

Ubuntu TweaLinux

2015-03-24 11:38:09

2024-10-15 08:37:08

2017-12-01 19:02:33

Airbnb大數(shù)據(jù)平臺(tái)

2020-10-21 08:38:47

React源碼

2021-02-22 09:30:09

go開(kāi)發(fā)環(huán)境桌面系統(tǒng)

2017-11-13 15:48:36

架構(gòu)Spring Clou演進(jìn)

2017-11-14 09:03:36

Spring Clou架構(gòu)演進(jìn)

2013-09-16 16:01:23

Android開(kāi)發(fā)代碼

2014-12-09 14:07:50

2012-08-06 09:40:36

DIV

2022-03-29 19:23:44

軟件開(kāi)發(fā)RTOS

2013-09-02 11:33:38

百度

2017-09-06 16:40:51

機(jī)器學(xué)習(xí)Airbnb預(yù)測(cè)房?jī)r(jià)

2011-06-08 14:24:35

Airbnb移動(dòng)互聯(lián)網(wǎng)

2010-12-28 10:48:09

信息系統(tǒng)項(xiàng)目管理師
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)