本文結合一些周知的概念和源碼片段,對View動畫的工作原理進行挖掘和分析。以下不是對源碼一絲不茍的分析過程,只是以搞清楚Animation的執(zhí)行過程、如何被周期性調(diào)用為目標粗略分析下相關方法的執(zhí)行細節(jié),最終貫穿View動畫實際發(fā)生的一切。
View動畫使用
Android提供了屬性動畫(property animation)、幀動畫(frame-by-frame animation)和View動畫( tweened animation:補間動畫),View動畫的使用相對簡單,但又不像真正意義上的動畫那樣對View產(chǎn)生有效的影響。
在從某些方面開始分析View動畫的工作原理之前,先來回顧一下使用View動畫相關的細節(jié)。
step 1. 準備Animation對象
可以通過xml或者代碼生成一個Animation對象。
通常是建議使用xml來定義動畫的,這樣有更好的閱讀性、獨立性和復用性,不過最終的,通過AnimationUtils.loadAnimation()加載一個xml動畫以后,得到的就是一個Animation對象。
不同動畫對象有它的專有參數(shù)需要設置,一般的,需要設置一些所有動畫公共的重要屬性,對應方法如setFillAfter、setDuration、setRepeatMode和setInterpolator等。
例如下面的代碼創(chuàng)建了一個在600ms內(nèi)沿著Y軸向下移動300像素的位移動畫:
TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 300); anim.setDuration(600); anim.setFillAfter(true);
step 2. 執(zhí)行動畫
通常會調(diào)用View.startAnimation立即開啟動畫,它里面