码迷,mamicode.com
首页 > Windows程序 > 详细

WindowAnimator笔记

时间:2014-08-26 09:52:10      阅读:553      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   color   java   使用   io   for   ar   

文章仅记录自己的一点理解,仅供自己参考。

WindowAnimator是一个窗口动画推进类,从成员变量mAnimationRunnable可以看出来。google源码对应这个类的解释:“Singleton class that carries out the animations and Surface operations in a separate task on behalf of WindowManagerService.”,意思是代表WMS在一次分割的任务中执行动画和操作Surface。Android中动画就是被分割成多次任务,每次任务,WMS都会使用这个类来执行,说白了就是推进动画。

1、mAnimationRunnable

这个变量是动画中一次任务的入口。

        mAnimationRunnable = new Runnable() {
            @Override
            public void run() {
                synchronized (mService.mWindowMap) {
                    mService.mAnimationScheduled = false;
                    animateLocked();
                }
            }
        };
对animateLocked()代码添加了同步锁,意味着同一时刻最多只有一个线程执行这个段代码。

2、mDisplayContentsAnimators

表示Display动画。该变量对于只有一个显示屏幕的手机来说只有一个成员。

    private class DisplayContentsAnimator {
        ScreenRotationAnimation mScreenRotationAnimation = null;
    }
DisplayContentsAnimator只包含一个ScreenRotationAnimation成员变量,用来保存屏幕旋转动画,从日志看mScreenRotationAnimation一直为null,不知道为什么,屏幕旋转动画后续再研究。

3、mAnimTransactionSequence

记录播动画时调用WindowAnimator.updateWindowsLocked()的序列。

4、mForceHiding

mForceHiding主要有四种状态:KEYGUARD_NOT_SHOWN、KEYGUARD_ANIMATING_IN、KEYGUARD_SHOWN、KEYGUARD_ANIMATING_OUT。主要用来保存播动画过程中keyguard状态。如果出现keyguard界面,就需要重新考虑keyguard窗口之下的所有窗口的可见性,因为keyguard会强制性的隐藏keyguard窗口之下的所有其他窗口(状态栏、壁纸等除外)。对于没有设置FLAG_SHOW_WHEN_LOCKED属性的窗口,当keyguard来临时会将该窗口隐藏掉。在keyguard退出动画时会将隐藏的窗口显示出来,这时如果窗口的高度高于keyguard,那么焦点窗口可能就会发生变化。

5、















WindowAnimator笔记

标签:android   style   blog   color   java   使用   io   for   ar   

原文地址:http://blog.csdn.net/guoqifa29/article/details/38842885

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!