自定义View理论篇之View基础结构
在学习一个东西的使用或者一项技能,首先就是要知道这个东西的出现解决的是什么问题,显而易见自定义View的出现就是系统自带的View不能满足我们的使用需求,我们需要根据自己所需来设计自己的view,也就是继承View类。
View的分类
View 主要分为两类:
类别 | 解释 | 特点 |
---|---|---|
单一视图 | 即一个View,如TextView | 不包含子View |
视图组 | 即多个View组成的ViewGroup,如LinearLayout | 包含子View |
View 类简介
- View类是Android中各个组件的基类,如View是ViewGroup的基类
- View表现为在屏幕中各种视图
View的构造函数
在自定义View的时候必须重写至少一个构造函数!
//直接通过代码实例化时调用这个构造函数
constructor(context: Context?) : super(context)
//如果View 在XML中定义则会走这个构造函数,自定义属性是从AttributeSet传入的
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
//以下构造方法不会自动调用,一般在第二个构造函数中主动调用
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
View 视图结构
这里主要制的是View在视图显示中的嵌套关系。对于多个View的视图,结构是树形的,最顶层的则是ViewGroup,下面可以包含若干个子View及嵌套View。
无论是measure过程、layout过程还是draw过程,永远都是从View树的根节点开始测量或计算(即从树的顶端开始),一层一层、一个分支一个分支地进行(即树形递归),最终计算整个View树中各个View,最终确定整个View树的相关属性。
Android 坐标系
Android坐标系定义为:
- 左上角为坐标原点
- 向右为X轴方向
- 向下为Y轴方向
注:区别于一般的数学坐标系
View位置(坐标)描述
- View的位置由4个顶点决定的(如下A、B、C、D)
4个顶点的位置描述分别由4个值决定(View的位置是相对于父控件而言的)
- Top:子View上边界到父view上边界的距离
- Left:子View左边界到父view左边界的距离
- Bottom:子View下边距到父View上边界的距离
- Right:子View右边界到父view左边界的距离
下一章导航:自定义View三大流程理论篇