Android View的绘制过程
View的绘制流程
view的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout、和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View发的宽和高,layout用来确认View在父容器中的放置位置,而draw则负责将View绘制在屏幕上。
performTraversals方法
- performTraversals会一次调用performMeasure、performLayut、performDraw三个方法
2.上面三个方法分别完成顶级View的measure、layout和draw这三大流程
其中在perfomMeasure中会调用measure方法
3.在measure方法中又会调用onMeasure方法
4.在onMeasure方法中则会对所有的子元素进行measure过程,这个时候measure流程就从父容器传到子元素中了,这样就完成了一次measure过程
5.接着子元素会重复父容器的measure过程,如此反复就完成了整个View树的遍历。同理,performLayout和performDraw的传递流程和performMeasure是相似的。
其中:
measure过程决定了View的宽/高
measure完成以后,可以通过getMeasuredWidth和getMeasuredHeight方法来获取到View测量后的宽/高,在几乎所有的情况下他都等同于View最终的宽/高
Layout过程决定了View的四个顶点的坐标和实际的View的宽/高,完成以后,可以通过getTop、getBottom、getRight、getLeft拿到View四个顶点的位置,并可以通过getWidth和getHeight方法来拿到View的最终宽/高。
Draw过程则决定了View的显示,只用draw方法完成以后View的内容才能呈现在屏幕上。
注:
getMeasuredWidth和getMeasuredHeight方法获取的高度和宽度是measure过程中计算得到到,所以要在measure之后调用。
getWidt()获取的宽度 = right – left 这是layout之后才能确定,所以getWidth()要在layout之后调用才能获取到值。同理,getHeight()
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android View的绘制过程