Android開源框架:NineOldAndroid


在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         }
View Code

 

2. Choreographer:不同於開源框架中,android系統還新引入了Choreographer(編舞者),通過此類來協調動畫時間,及繪制等。最主要的是Choreographer中提供了VSync:垂直中斷。

Choreographer會協調每幀時間,使用回調函數來執行Runnable.run。可使動畫的顯示更流暢,不會出現動畫卡頓,畫面撕裂等狀況。關於VSync的一些更具體的知識可以百度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM