首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android中invalidate() 函数详解(组合Android 4.0.4 最新源码)

2012-08-01 
Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)invalidate()函数的主要作用是请求View树进

Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)

      invalidate()函数的主要作用是请求View树进行重绘,该函数可以由应用程序调用,或者由系统函数间接调用,例如setEnable(), setSelected(), setVisiblity()都会间接调用到invalidate()来请求View树重绘,更新View树的显示。

      注:requestLayout()和requestFocus()函数也会引起视图重绘

      下面我们通过源码来了解invalidate()函数的工作原理,首先我们来看View类中invalidate()的实现过程:

      具体分析如下:

            1、判断此次调用是否在UI线程中进行

            2、将dirty的坐标位置转换为ViewRoot的屏幕显示区域

            3、更新mDirty变量,并调用scheduleTraversals发起重绘请求

      至此一次invalidate()就结束了

      总结:invalidate主要给需要重绘的视图添加DIRTY标记,并通过和父视图的矩形运算求得真正需要绘制的区域,并保存在ViewRoot中的mDirty变量中,最后调用scheduleTraversals发起重绘请求,scheduleTraversals会发送一个异步消息,最终调用performTraversals()执行重绘,performTraversals()的具体过程以后再分析。


    以上所有代码基于Android 4.0.4,并结合《Android内核剖析》分析总结而成,源码中涉及到的部分细节本人也未完全理解,还望高手指点~~

热点排行