1.1 View的测量
测量模式可以分为一下三种
- EXACTLY
即精确模式,当我们将控件的layout_width属性指定为具体的数字时或指定为match_parent属性时,使用的是EXACTLY模式; AT_MOST
即最大值模式,当控件的layout_width属性指定为wrap_content时,控件大小一般随着控件或内容的变化而变化,此时控件的尺寸只要不超过父控件允许的最大尺寸即可。UNSPECIFIED
它不指定其大小测量模式,View想多大就多大,通常情况在绘制自定义View时才会使用。
View类默认的omMeasure()方法只支持EXACTLY模式,所以如果在自定义控件的时候不重写onMeasure()方法的话,就只能使用EXACTLY模式。控件可以响应你指定的具体高度或者是match_parent属性。控件指定为wrap_conent是等同于match_parent。而如果要让自定义View支持wrap_content属性,那么就要重写onMeasure()方法来指定wrap_content时的大小。
1.2 自定义View
在View中通常有以下一些比较重要的回调方法。
- onFinishInflate(): 从xml加载组件后回调。
- onSizeChanged(): 组件大小改变时回调。
- onMeasure(): 回调该方法来测量控件
- onDraw: 回调该方法来绘制控件
- onTouchEvent(): 监听到触摸事件时回调
- onLayout: 回到该方法来确定显示的位置
通常情况下,有一下三种方法来实现自定义的控件。
- 对现有控件进行扩展
- 通过组合来实现新的控件
重写View来实现全新的控件
- 3示例
待更新
- 3示例