View工作原理之Layout过程和Draw过程
Layout过程
Layout过程正如其名,是负责确定View的位置的过程,在这个过程中,会确定View以及子View的位置。
源码流程
在layout函数中,首先调用了setFrame函数来确定自己的位置,然后依次调用子View的onLayout函数来确定其位置。
流程图如下:

具体的onLayout方法依照View的类型不同也会有所不同,因为子元素在内部的排列方式会有所不同,例如我们常见的LinearLayout就有横向和纵向两种排列方式。
Draw过程
Draw过程正如其名字,绘制,将View绘制到屏幕上
绘制的步骤
1.绘制背景 bacground.draw(canvas)
2.绘制自身 onDraw
3.绘制children dispatchDraw
4.绘制装饰 onDrawScrollBars
这几个流程基本是按照顺序来执行的,中间还有一些条件的判断,属于具体细节,可以参看源码。
setWillNotDraw函数
顾名思义,传入true参数之后,系统不会对其进行绘制流程,一般这个参数是被关闭的,当我们自定义的ViewGroup不需要绘制的时候可以启动,可以让系统对其进行一定程度的优化。
结语
至此,View的三个最主要的工作流程已经全部讲述完毕,作者以源码结合实例的方式进行了讲解。
弄清view的工作流程对之后自定义控件的学习和使用是十分有好处的,所以这一节的内容显得格外重要,所以特此作两篇读书笔记,以加深印象。