[Android技術專題]動畫知識概覽

在Android應用開發(fā)中我們每天都在接觸動畫(Activity進入和退出、頁面滑動、點擊按鈕等都有動畫效果),但入門容易,真正做好很難。如果要把效果做得自然、看上去很爽需要你有一定的美感;如果要把效果做得足夠流暢,你需要深入研究動畫,弄懂其中的細節(jié)和原理。

一、在Android平臺可以通過如下幾種方式實現(xiàn)動畫效果

1 補間動畫

補間動畫即開發(fā)者只需要指定開始、結束的關鍵幀,動畫變化的“中間幀”則由系統(tǒng)根據(jù)補間動畫加速器算法計算補齊。補間動畫包括旋轉(RotateAnimation)、透明(AlphaAnimation)、位移(TranslateAnimation)和縮放(ScaleAnimation)。補間動畫的使用有如下幾個特點:

  • 某個動畫的實現(xiàn)既可以是一種動畫效果,也可以是多種補間動畫的組合(需要用到set標簽或者AnimationSet類);

  • 補間動畫的實現(xiàn)既可以在xml中定義,也可以通過代碼實現(xiàn);

  • 補間動畫的變化規(guī)律可以通過插值器(補間動畫加速器)Interpolator控制,系統(tǒng)定義了常見的插值器,如果不能滿足你的要求,可以自定義插值器;

  • 補間動畫的難點在于根據(jù)參考點對位置的關系換算,如果處理不好,可能要弄很久。

2 幀動畫

幀動畫是一幀一幀的顯示動畫效果。創(chuàng)建幀動畫除了通過在xml中用animation-list作為根節(jié)點、item定義每一幀要顯示的圖片之外,也可以用Java代碼的形式來創(chuàng)建幀動畫。幀動畫需要用到的核心類是AnimationDrawable。

幀動畫的特點是:

  • 實現(xiàn)簡單;

  • 效率低;

  • 視覺工作量大。

3 屬性動畫

屬性動畫是在Android 3.0開始引入的一種動畫模式(如果想在Android 3.0之前的版本中使用屬性動畫,可以引用JakeWharton開源的NineOldAndroids),有了屬性動畫,可以考慮再也不使用補間動畫和幀動畫了,它功能強大、使用靈活,強烈建議在實際編碼中使用屬性動畫。

關于屬性動畫的介紹網(wǎng)上已經(jīng)有很多優(yōu)秀的技術文章,比如郭霖的Android屬性動畫完全解析(上),初識屬性動畫的基本用法、Android屬性動畫完全解析(中),ValueAnimator和ObjectAnimator的高級用法Android屬性動畫完全解析(下),Interpolator和ViewPropertyAnimator的用法,所以不再贅述。

4 GIF

GIF是一種圖片格式,它分為靜態(tài)GIF和動畫GIF兩種,擴展名為.gif,是一種壓縮位圖格式,支持透明背景圖像,適用于多種操作系統(tǒng),“體型”很小,網(wǎng)上很多小動畫都是GIF格式。其實GIF是將多幅圖像保存為一個圖像文件,從而形成動畫,最常見的就是通過一幀幀的動畫串聯(lián)起來的搞笑gif圖,所以歸根到底GIF仍然是圖片文件格式。但GIF只能顯示256色。

GIF有天然的劣勢,圖片質(zhì)量很低,有很多應用的Splash界面會直接播放gif格式的文件,避免通過xml和代碼實現(xiàn)起來過于復雜,github上優(yōu)秀的GIF開源庫有:GifViewandroid-gif-drawable。

5 視頻

有很多應用的引導界面是直接播放的視頻,特別是一些大型的游戲,反編譯它的代碼可以看到,就是一個視頻文件。視頻文件在分辨率適配上會比較麻煩,制作成本也比較大。

6 SVG

SVG是可縮放矢量圖形,他是基于可擴展標記語言,用于描述二維矢量圖形的一種圖形格式。它嚴格遵從XML語法,并用文本格式的描述性語言來描述圖像內(nèi)容,因此是一種和圖像分辨率無關的矢量圖形格式。SVG格式具備目前網(wǎng)絡流行的jpg和png等格式無法具備的優(yōu)勢:可以任意放大圖形顯示,但絕不會以犧牲圖像質(zhì)量為代價;可在SVG圖像中保留可編輯和可搜尋的狀態(tài);平均來講,SVG文件比其它格式的圖像文件要小很多,因而下載也很快。關于SVG更為詳細的介紹可以參考這篇文章:Android實現(xiàn)炫酷SVG動畫效果。

7 其它

還可以通過自定義類,用定時器給ImageView更換背景圖片的方式實現(xiàn)動畫;如果使用到了游戲引擎,游戲引擎中對動畫的渲染效率有增強,動畫效果會很流暢。

二、使用動畫過程中遇到過哪些坑

  • 在有動畫效果的界面,強烈建議不要關掉硬件加速,在沒有硬件加速的環(huán)境下運行動畫效果會顯得不流暢;

  • 動畫(特別是循環(huán)播放的動畫)效果功耗很大(因為CPU和GPU在高負荷持續(xù)工作呀),為了降低功耗,盡量控制動畫的大小,以及動畫出現(xiàn)的時機,最好是用戶觸發(fā)某個操作后執(zhí)行動畫效果,不要一進入界面就執(zhí)行動畫;

  • 謹慎使用AnimationDrawable,在4.2及之前的版本會很耗內(nèi)存;并且AnimationDrawable中的每一幀圖片在使用完后不能釋放,否則在下次使用時會直接報異常;還有每一幀圖片不宜過大,否則會卡成翔;

三、有哪些關于動畫的優(yōu)質(zhì)開源項目

四、參考資料

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,692評論 4 61
  • 又是到了晚11點搶時間更文。 昨天首更便是如此。 狼狽不堪。 伏案7個小時不停歇地趕出公眾號里一份幾千字的超長攻略...
    Miss李ls閱讀 193評論 5 2
  • 讀了老舍的《母雞》我也對母雞充滿了敬意。今天我也來寫寫我觀察到的母雞! 以前的以前,我也養(yǎng)過一群雞。母雞帶著一群小...
    喜歡廚房的人閱讀 519評論 0 3

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