自定义控件的分类
自定义控件有两种:自定义View,自定义ViewGroup
View
View或者View的一个子类,不能有子View,提供具体功能,比如:
系统自带的View:
Button,用来用户点击的View
TextView,显示文本的View
EditText,实现输入
......
自定义View:
继承自View,实现某种效果....
ViewGroup
ViewGroup继承自View,可以有自View,提供了具体的功能,同时能够管理子控件,大小,摆放位置,绘制….
系统ViewGroup:
LinearLayout:让子View按照某种规则摆放
RelayTiveLayout
........
自定义ViewGroup:
如组合控件....
View与ViewGroup的关系
继承
如上图:
ViewGroup实现了ViewManager,ViewParent等借口,继承自View,同时有很多实现类.
ImageView,TextView直接继承了View.....
组合
如这张图展示:
ViewGroup有子View,同时有子ViewGroup,子ViewGroup同时可能有子View或者子ViewGroup,呈树状递归的关系.
View的绘制流程
一个View或者ViewGroup究竟是怎么样绘制显示出来的呢?要搞懂这个问题,我们需要弄清楚View的绘制流程.
View绘制的时候有3个重要的方法需要知道:measures–>layout–>draw
注意:
这三个方法都是final的,子类不能复写.
1.measures:测量,控制控件的大小
自定义时,自己要控制子控件的大小-->子类复写onMeassure
2.layout:摆放,控制控件的位置
自定义时,自己要控制子控件的摆放位置-->子类复写onLayout
几个参数:left,right,top,bottom是相对自己的直系父容器的位置(不要越级,一个View只有其父能管理,爷爷不能控制)
3.draw:绘制,控制显示的样子
自定义时,自己要控制子控件的样式-->使用画板canvas.draw()
流程图
在开发的时候,只要遵循View的绘制流程实现自定义控件就不是难事!