您的位置:首页 > 移动开发 > Android开发

天天记录 - Android invalidate流程分析-图文

2012-12-23 08:56 459 查看
    目的:通过一个Demo在所有自定义类中覆写所有invalidate开头的方法,打印LOG,看看Framework invalidate流程都执行了哪些方法

一 例子布局 与 树形结构图



 

          


二 先看看效果    源码下载



三 以上效果后台打出的LOG
View  invalidateDrawable(Drawable drawable)
View  invalidate , l = 0 , t = 0 , r = 90 , b = 90
LinearLayout  invalidateChildInParent Rect Left = 0, right = 90, top = 0, bottom = 90
LinearLayout Location 0 = 55
LinearLayout Location 1 = 55
RelativeLayout  invalidateChildInParent Rect Left = 55, right = 145, top = 55, bottom = 145
invalidateChildInParent Location 0 = 60
invalidateChildInParent Location 1 = 115


四  根据LOG,分析invalidate流程

1.  首先会触发绿色区域View的invalidate方法,并传入需重绘区域信息

View  invalidateDrawable(Drawable drawable)

View  invalidate , l = 0 , t = 0 , r = 90 , b = 90



2. 绿色区域view会把invalidate请求传递给黄色区域(LinearLayout),对传递重绘区域的信息

LinearLayout  invalidateChildInParent Rect Left = 0, right = 90, top = 0, bottom = 90

LinearLayout Location 0 = 55

LinearLayout Location 1 = 55



3. 黄色区域又把invalidate请求传递给蓝色区域(RelativeLayout),,对传递针对黄色区域的重绘信息

RelativeLayout  invalidateChildInParent Rect Left = 55, right = 145, top = 55, bottom = 145

invalidateChildInParent Location 0 = 60

invalidateChildInParent Location 1 = 115



五 总结 invalidate的传递流程

点击绿色区域,由绿色区域触发invalidate,首先传递给黄色区域带有区域信息,再传递给蓝色区域带有区域信息,含有区域信息的目的是仅重绘此区域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: