# 讀 Android 開發藝術探索 &9

關鍵詞:View 動畫 / 幀動畫 / 屬性動畫

Android 動畫分爲三種:View 動畫、幀動畫和屬性動畫。本次筆記初步梳理了跟 Android 動畫相關的基本知識點,便於今後溫故知新,查漏補缺。

1. View 動畫 #

需要知道的幾點:

  1. View 動畫的作用對象是 View;
  2. 只支持 4 種類型:平移(Translate)TranslateAnimation、旋轉(Rotate)RotateAnimation、縮放(Scale)ScaleAnimation、不透明度(Alpha)AlphaAnimation;
  3. 雖然幀動畫也屬於 View 動畫,但是其表現形式與以上四種的變換效果不同;
  4. View 動畫建議採用 XML 來定義動畫,XML 的可讀性比較好;
  5. 使用 View 動畫的特殊場景:ViewGroup 中可以控制子元素的出場效果,在 Activity 中可以實現不同 Activity 之間的切換效果;
  6. LayoutAnimation 也是一個 View 動畫,作用於 ViewGroup,常常被用在 ListView 上;
  7. Activity 可以自定義切換效果,主要用到 overridePendingTranslation(int enterAnim, int exitAnim) 方法,需要在 startActivty(Intent) 或者 finish() 之後調用它才能生效;

PS 幀動畫:
幀動畫其實也屬於 View 動畫,但是不同的是系統提供了另一個類 AnimationDrawable 來使用幀動畫,順序播放一組實現預定義好的圖片。比較簡單但是容易引起 OOM。

2. 屬性動畫 #

需要知道的幾點:

  1. 對作用對象進行了擴展,屬性動畫可以對任何對象做動畫,甚至還可以沒有對象;想要實現比較絢麗的動畫,需要知道:ValueAnimator、ObjectAnimator 和 AnimatorSet 這三個動畫類,其中 ObjectAnimator 繼承自 ValueAnimator,AnimatorSet 是動畫集合可以定義一組動畫;
  2. 屬性動畫默認的時間間隔是 300 ms,默認幀率 10 ms/幀;
  3. 屬性動畫可以達到的效果是:在一個時間間隔內,完成對象從一個屬性值到另一個屬性值的改變,幾乎是無所不能的;
  4. 實際開發中建議使用代碼的方式來實現屬性動畫,因爲更簡單並且通過代碼動態地創建屬性動畫;
  5. 屬性動畫的工作原理:
    要求動畫作用的對象提供該屬性的 set 方法,屬性動畫根據你傳遞的該屬性初始值和最終值,以動畫的效果多次去調用 set 方法。每次傳遞給 set 方法的值都不一樣,確切來說是隨着時間的推移,所傳遞的值越來越接近最終值;
  6. 屬性動畫中的插值器(Interpolator)和估值器(TypeEvaluator)很重要,是實現非勻速動畫的重要手段;插值器的作用是根據當前時間流逝的百分比來計算出當前屬性值改變的百分比。估值器的作用是根據當前屬性改變的百分比來計算改變後的屬性值;
  7. 屬性動畫要求該屬性有 set 方法和 get 方法(可選)
  8. 可以自定義插值器和估值器,它們都是一個接口,且內部都只有一個方法,我們只要派生一個類實現接口就可以了,然後就可以做出千奇百怪的效果;
  9. 屬性動畫需要運行在 Looper 的線程裏;

3. 使用動畫需要特別注意的幾點 #

  1. OOM 問題。儘量避免使用幀動畫;
  2. 內存泄漏問題。屬性動畫中有一類是無限循環的動畫,需要在 Activity 的退出時及時停止,否則導致 Activity 無法釋放而造成內存泄漏,View 動畫不存在這個問題;
  3. View 動畫是對 View 的影像做動畫,並不是真的改變 View 的狀態,防止 setVisibility(View.GONE) 失效,只需要調用 view.clearAnimation() 清除 View 動畫即可解決此問題;
  4. 儘量使用 dp,使用 px 會導致在不同的設備上有不同的效果;
  5. 建議使用動畫的過程中,開啓硬件加速提高動畫的流暢性;

End.

Note by HF.
Learn from 《Android 開發藝術探索》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章