zoukankan      html  css  js  c++  java
  • 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的一些更具体的知识可以百度。

  • 相关阅读:
    falsh读取网页数据
    IBATISNET中的lazyLoad
    Json.Net学习笔记(四) Json对象的读写
    Json.Net学习笔记(五) 自定义Json序列化特性
    Json.Net学习笔记(三) Json与Xml之间的转换
    将 GridView 中的内容导出到 Excel 中多个工作表(Sheet) 的方法
    jQuery–20个最新的jQuery效果.
    Json.Net学习笔记(七) 序列化集合
    Json.Net学习笔记(六) Json.Net中关于时间的序列化
    Json.Net 学习笔记(一)
  • 原文地址:https://www.cnblogs.com/luow/p/4511431.html
Copyright © 2011-2022 走看看