在android3.0以前的版本,要實現動畫,一般是使用NineOldAndroid開源框架,之后,就可以直接使用android提供的animation API了。
仔細看過此開源框架后,可看出此框架和系統的動畫實現還有有區別的。主要但不僅僅一下幾點:
1. 計算每幀動畫的流程:AnimationHandler,NineOldAndroid中是繼承於Handler,在消息隊列中不斷的處理每幀動畫的數據,而系統則是實現了Runnable接口,在線程中進行處理

1 //NineOldAndroid 2 private static class AnimationHandler extends Handler{ 3 public void handlerMessage(){ 4 .... 5 sendEmptyMessageDelayed(...); 6 } 7 8 9 //Android系統 10 protected static class AnimationHandler implements Runnable { 11 // The per-thread list of all active animations 12 /** @hide */ 13 protected final ArrayList<ValueAnimator> mAnimations = new ArrayList<ValueAnimator>(); 14 15 // Used in doAnimationFrame() to avoid concurrent modifications of mAnimations 16 private final ArrayList<ValueAnimator> mTmpAnimations = new ArrayList<ValueAnimator>(); 17 18 // The per-thread set of animations to be started on the next animation frame 19 /** @hide */ 20 protected final ArrayList<ValueAnimator> mPendingAnimations = new ArrayList<ValueAnimator>(); 21 22 /** 23 * Internal per-thread collections used to avoid set collisions as animations start and end 24 * while being processed. 25 * @hide 26 */ 27 protected final ArrayList<ValueAnimator> mDelayedAnims = new ArrayList<ValueAnimator>(); 28 private final ArrayList<ValueAnimator> mEndingAnims = new ArrayList<ValueAnimator>(); 29 private final ArrayList<ValueAnimator> mReadyAnims = new ArrayList<ValueAnimator>(); 30 31 private final Choreographer mChoreographer; 32 ..... 33 }
2. Choreographer:不同於開源框架中,android系統還新引入了Choreographer(編舞者),通過此類來協調動畫時間,及繪制等。最主要的是Choreographer中提供了VSync:垂直中斷。
Choreographer會協調每幀時間,使用回調函數來執行Runnable.run。可使動畫的顯示更流暢,不會出現動畫卡頓,畫面撕裂等狀況。關於VSync的一些更具體的知識可以百度。