Android开发(15)——深入源码了解视图创建流程

2021-03-30  本文已影响0人  让时间走12138

本节内容

1.View、ViewGroup和ViewRootImpl简介

2.View和ViewGroup的关系

3.performTraversals测量尺寸

4.布局和绘制

一、View、ViewGroup和ViewRootImpl简介
1.自定义View
  • (1)为什么需要自定义View:系统的View满足不了我们实际的需求。
2.View:单个视图,最小单元。一个View占据了屏幕的一块矩形区域,它负责绘制和事件处理。
3.ViewGroup:容器,可以承载单个或多个子视图。一个ViewGroup是一个特殊的View,它可以容纳其他的View(称为children)。它是布局(layouts)和视图容器(view containers)的base class,也就是说前面两个要继承ViewGroup。它还定义了一个LayoutParams类,它是为布局参数服务的。(任何一个容器都有自己的布局参数。)
4.ViewRootImpl:View的一个实现。它是视图层级里面的最顶层,实现了视图(View)和窗口管理器(windowManager)之间的协议,大多情况都是一个内部实现,不用去管。
二、View和ViewGroup的关系
1.ViewGroup里面可以包含多个ViewGroup和View,但是View是最小单元,不能再包裹其他控件了。
image.png
三、performTraversals测量尺寸
视图创建流程图.png
1.PerformMeasure:测量自己的宽和高,在这个方法里面会调用view.measure,本质上还是调用view的onMeasure方法。
2.如果是单个view,只需要测量一下自己有多大即可。
3.如果是ViewGroup,里面又有子视图(view),它调用performMeasure方法,容器的宽高由子视图来决定。这个时候要先知道子视图的尺寸,才能确定容器的尺寸。
四、布局和绘制
1.测量完ViewGroup的宽高之后,调用performLayout方法,也就是调用view对应的onLayout方法,重写这个方法,确定容器的位置。
2.canvas:一个用于绘制的类,可以理解为画板。
3:draw:系统自带的绘制的方法,它有很多绘制的步骤,必须按照正常的合适的顺序来执行。
  • 1.绘制背景,setBackgroundColor
  • 2.画具体的内容 onDraw(),重写这个方法。
  • 3.画子视图(如果总体是一个容器的话,才有这个步骤)调用dispatchDraw()方法
  • 4.画一点装饰性的东西,通过onDrawForeground()方法来实现。
4.Paint:画笔。
5.Path:形状。
上一篇下一篇

猜你喜欢

热点阅读