自定义控件有两种:自定义View,自定义ViewGroup
View或者View的一个子类,不能有子View,提供具体功能,比如:
系统自带的View: Button,用来用户点击的View TextView,显示文本的View EditText,实现输入 ...... 自定义View: 继承自View,实现某种效果....ViewGroup继承自View,可以有自View,提供了具体的功能,同时能够管理子控件,大小,摆放位置,绘制….
系统ViewGroup: LinearLayout:让子View按照某种规则摆放 RelayTiveLayout ........ 自定义ViewGroup: 如组合控件....如上图:
ViewGroup实现了ViewManager,ViewParent等借口,继承自View,同时有很多实现类. ImageView,TextView直接继承了View.....如这张图展示:
ViewGroup有子View,同时有子ViewGroup,子ViewGroup同时可能有子View或者子ViewGroup,呈树状递归的关系.一个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的绘制流程实现自定义控件就不是难事!