View工作原理之Layout过程和Draw过程

Layout过程

Layout过程正如其名,是负责确定View的位置的过程,在这个过程中,会确定View以及子View的位置。

源码流程

在layout函数中,首先调用了setFrame函数来确定自己的位置,然后依次调用子View的onLayout函数来确定其位置。

流程图如下:

1

具体的onLayout方法依照View的类型不同也会有所不同,因为子元素在内部的排列方式会有所不同,例如我们常见的LinearLayout就有横向和纵向两种排列方式。

Draw过程

Draw过程正如其名字,绘制,将View绘制到屏幕上

绘制的步骤

1.绘制背景  bacground.draw(canvas)
2.绘制自身 onDraw
3.绘制children dispatchDraw
4.绘制装饰   onDrawScrollBars

这几个流程基本是按照顺序来执行的,中间还有一些条件的判断,属于具体细节,可以参看源码。

setWillNotDraw函数

顾名思义,传入true参数之后,系统不会对其进行绘制流程,一般这个参数是被关闭的,当我们自定义的ViewGroup不需要绘制的时候可以启动,可以让系统对其进行一定程度的优化。

结语

至此,View的三个最主要的工作流程已经全部讲述完毕,作者以源码结合实例的方式进行了讲解。

弄清view的工作流程对之后自定义控件的学习和使用是十分有好处的,所以这一节的内容显得格外重要,所以特此作两篇读书笔记,以加深印象。

u3coding
A software developer

Leave a Comment

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.