直播App中Android酷炫禮物動(dòng)畫實(shí)現(xiàn)方案(上篇)

在當(dāng)下移動(dòng)直播火爆的年代,如果你曾經(jīng)使用過移動(dòng)端直播應(yīng)用铣减,相信會(huì)被里面那令人驚嘆的禮物動(dòng)畫效果迷住,比如像下面這樣的效果脚作。

從開發(fā)人員的角度來看葫哗,這樣的效果雖然漂亮,實(shí)現(xiàn)但卻是一大挑戰(zhàn)球涛,除了要考慮編碼實(shí)現(xiàn)的效率劣针、性能表現(xiàn)外,還要結(jié)合直播業(yè)務(wù)本身的特性等亿扁。

實(shí)現(xiàn)思路

首先捺典,從實(shí)現(xiàn)思路方面入手,有以下幾個(gè)方案作為考慮:

  • 方案一:幀動(dòng)畫从祝;

  • 方案二:屬性動(dòng)畫襟己;

  • 方案三:Gif或WebP;

  • 方案四:實(shí)現(xiàn)一套播放動(dòng)畫的框架牍陌,客戶端只需要繼承進(jìn)來擎浴,UI設(shè)計(jì)師按照約定的動(dòng)畫語法作圖給開發(fā)人員即可;(原理類似SVG)

從實(shí)現(xiàn)性能毒涧、效率以及復(fù)用角度上來看贮预,我們最終采用了最后一種方案。

  • 方案一需要把圖片帶到安裝包中,增大了安裝包體積仿吞,而且直播應(yīng)用中禮物種類很多滑频,每個(gè)禮物都帶一套幀動(dòng)畫進(jìn)去,相當(dāng)不科學(xué)唤冈。

  • 方案二開發(fā)代價(jià)較大误趴,每一套禮物動(dòng)畫基本都不一樣,開發(fā)人員需要去細(xì)細(xì)調(diào)參务傲,花在業(yè)務(wù)上編碼的時(shí)間會(huì)變得非常有限凉当,從代碼復(fù)用率極低。

方案一售葡、二除了以上提到的缺陷外看杭,還有一個(gè)直播業(yè)務(wù)場(chǎng)景問題沒有解決,就是當(dāng)客戶端發(fā)布之后挟伙,想要上架一些新設(shè)計(jì)的禮物就必須要讓用戶升級(jí)客戶端楼雹,否則是無法體驗(yàn)到新上架的禮物。

方案三沒有以上提到的業(yè)務(wù)問題尖阔,但在性能方面并不是最優(yōu)選擇贮缅。Gif圖實(shí)質(zhì)上就是把一幀幀的靜態(tài)圖片打包到一起,打成一個(gè)壓縮包介却,但是由于Gif的壓縮算法問題谴供,實(shí)際上這個(gè)壓縮包一點(diǎn)都不小,隨便一個(gè)炫酷點(diǎn)的禮物效果都能弄個(gè)幾兆到十幾兆不等的文件出來齿坷,對(duì)于移動(dòng)端來說桂肌,不論從下載和播放的性能表現(xiàn)上都差強(qiáng)人意。Gif圖片能做的動(dòng)畫永淌,WebP格式的圖片同樣可以實(shí)現(xiàn)崎场,且WebP圖片要比Gif圖小很多,下圖是同樣效果用Gif和WebP的實(shí)現(xiàn)對(duì)比遂蛀。

復(fù)雜WebP動(dòng)圖在編解碼時(shí)谭跨,性能上表現(xiàn)得差強(qiáng)人意,而且雖然Android在4.0時(shí)開始支持WebP李滴,但是要支持有損且?guī)该飨袼氐腤ebP得到Android 4.2.1之后螃宙。Gif和WebP圖片還有一個(gè)場(chǎng)景上的缺陷是,如果我要在播放到某一幀動(dòng)畫時(shí)悬嗓,動(dòng)態(tài)插入一些幀污呼,實(shí)現(xiàn)起來難度較大,就像我們最近上線的產(chǎn)品Orangy里面的一個(gè)配對(duì)動(dòng)畫的效果包竹,在愛心桃的中間某一幀插入兩個(gè)配對(duì)者的頭像燕酷。

前面鋪墊了這么多籍凝,最終還是為了帶出我們的主角,方案四苗缩。方案四是YY UED團(tuán)隊(duì)所研發(fā)的一套動(dòng)畫實(shí)現(xiàn)方案饵蒂,作者給它起了名字叫SVGA,目前已經(jīng)在YY系的很多產(chǎn)品線上良好運(yùn)行著酱讶,下面簡單的介紹它的優(yōu)點(diǎn):

  • 對(duì)切圖小哥和寫B(tài)ug小哥友好退盯,嗯,沒錯(cuò)泻肯,再也不用互相傷害了渊迁。

  • 高效,終端只需要繼承這套方案框架灶挟,把動(dòng)畫實(shí)現(xiàn)交給動(dòng)畫設(shè)計(jì)師即可琉朽。

  • 高性能,在實(shí)現(xiàn)酷炫動(dòng)畫的基礎(chǔ)上稚铣,播放性能表現(xiàn)優(yōu)于Gif和WebP箱叁。

  • 動(dòng)畫文件小,同樣的動(dòng)畫效果惕医,SVGA文件要比Gif和WebP的文件小得多耕漱。

  • 跨平臺(tái),支持Android抬伺、iOS螟够、React Native、Web沛简、還有不久前剛出來的微信小程序齐鲤,不過小程序上的繪制功能很弱,效果有點(diǎn)感人椒楣。

  • 開源,可以直接訪問YY UED的Github獲取框架源碼 https://github.com/yyued

具體各種使用姿勢(shì)牡肉,可以參考開源庫中README上的說明捧灰,或者訪問SVGA的官網(wǎng) http://svga.io

實(shí)現(xiàn)原理

如果你熟悉SVG统锤,那么理解起SVGA的實(shí)現(xiàn)原理并不會(huì)很困難毛俏,今天太晚了,下篇文章會(huì)繼續(xù)聊饲窿,感興趣的同學(xué)可以閱讀源碼先睹為快煌寇,在沒有看代碼之前,你會(huì)怎么覺得內(nèi)部是怎么實(shí)現(xiàn)的呢逾雄?阀溶。哦腻脏,對(duì)了,這套代碼的作者Pony(我經(jīng)常叫他崔神)是個(gè)全棧大佬银锻,之前寫Java時(shí)覺得語法太繁瑣永品,后面干脆用Kotlin重寫了整套框架,就是這么任性击纬,我時(shí)常問崔神需不需要端茶遞水的小弟鼎姐,結(jié)果他總是不缺…

引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市更振,隨后出現(xiàn)的幾起案子炕桨,更是在濱河造成了極大的恐慌,老刑警劉巖肯腕,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谋作,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乎芳,警方通過查閱死者的電腦和手機(jī)遵蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奈惑,“玉大人吭净,你說我怎么就攤上這事‰鹊椋” “怎么了寂殉?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長原在。 經(jīng)常有香客問我友扰,道長,這世上最難降的妖魔是什么庶柿? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任村怪,我火速辦了婚禮,結(jié)果婚禮上浮庐,老公的妹妹穿的比我還像新娘甚负。我一直安慰自己,他們只是感情好审残,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布梭域。 她就那樣靜靜地躺著,像睡著了一般搅轿。 火紅的嫁衣襯著肌膚如雪病涨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天璧坟,我揣著相機(jī)與錄音既穆,去河邊找鬼赎懦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛循衰,可吹牛的內(nèi)容都是我干的铲敛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼会钝,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼伐蒋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迁酸,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤先鱼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奸鬓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焙畔,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年串远,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏多。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澡罚,死狀恐怖伸但,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情留搔,我是刑警寧澤更胖,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站隔显,受9級(jí)特大地震影響却妨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜括眠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一彪标、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哺窄,春花似錦捐下、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸柬。三九已至生年,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廓奕,已是汗流浹背抱婉。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工档叔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒸绩。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓衙四,卻偏偏與公主長得像,于是被迫代替她去往敵國和親患亿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子传蹈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345