View 的工作原理

来源:互联网 发布:老外吃中国菜知乎 编辑:程序博客网 时间:2024/03/29 21:53

android开发艺术探索,笔记

4.1 ViewRoot 和 DecorView

View的绘制的三大流程:measure、 layout 、draw
ViewRoot对应于ViewRootImpl 类,它是连接WindowManagerDecorView的纽带,View的三大流程均是通过ViewRoot 来完成的,在ActivityThread中,当Activity对象被创建完毕后,会将DecorView 添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView 建立关系

View的绘制流程是从ViewRootperformTraversals 方法开始的,他通过measure、 layout 、draw 三个过程才能最终将一个View绘制出来
measure:用于测量View的宽和高
layout:用来确定View在父容器中的放置位置
draw:负责将View绘制在屏幕上

performTraversals 会一次调用performMeasure 、performLayout、performDraw 三个方法,这三个方法分别完成顶级View 的 measure、 layout 、draw 这三大流程,其中在performMeasure 中会调用measure 方法,在measure 中又会调用onMeasure方法,在onMeasure方法中国则会对所有的子元素进行measure 过程,这个时候measure流程就从父容器传递到子元素中了,这样就完成了一次measure 过程,接着子元素会重复父元素的measure 过程,如此反复就完成了整个View 树的遍历,

performTraversals 的工作流程图

measure 过程决定了View 的宽和高,Measure完成以后,可以通过getMeasureWidth 、getMeasureHeight 方法来获取到View测量后的宽、高,在几乎所有的情况下他都等同于View最终的宽、高,但是特殊情况下除外
Layout 过程决定了View的四个顶点的坐标和实际的View的宽、高,完成以后可以通过getTop、getButtom、getLeft、getRight 来拿到View的四个顶点的位置,并可以通过getWidth 、getHeight 方法拿到View的最终宽、高
Draw 过程决定了View的显示,只有draw方法完成以后View 的内容才能呈现在屏幕上

0 0
原创粉丝点击