一. View的定义和分类

1. 定义

View 表现为显示在屏幕上的各种视图。

2. 分类

① 单一视图:单独的View

② 多个视图:多个View组成的ViewGroup

二. View 的构造函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//如果View是在Java代码里面new的,则调用第一个构造函数
public SelfView(Context context) {
super(context);
}

//如果View是在.xml里声明的,则调用第二个构造函数
//自定义属性是从AttributeSet参数传进来的
public SelfView(Context context, AttributeSet attrs) {
super(context, attrs);
}

//不会自动调用
//一般是在第二个构造函数里主动调用
//如View有style属性时
public SelfView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

//API21之后才使用
//不会自动调用
//一般是在第二个构造函数里主动调用
//如View有style属性时
public SelfView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

详细内容可以参考:

深入理解Android View的构造函数

Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

三. View的视图结构

多View的视图,结构是树形结构。最顶层是ViewGroup,ViewGroup下可能有多个ViewGroup或View。

一定要记住:

无论是measure过程、layout过程还是draw过程,永远都是从View树的根节点开始测量或计算(即从树的顶端开始),一层一层、一个分支一个分支地进行(即树形递归),最终计算整个View树中各个View,最终确定整个View树的相关属性。

四. View坐标系

View坐标系

参考文章

自定义View基础 - 最易懂的自定义View原理系列(1)