07.自定义View
约 431 字大约 1 分钟
自定义View
View的绘制流程 ( 时序 )
构造函数
属性初始化阶段
onMeasure(int widthMeasureSpec, int heightMeasureSpec) 用来测量视图的宽度和高度的
desiredWidth 和 desiredHeight 定义了期望的尺寸。
1.通过 MeasureSpec.getMode 获取测量模式,并通过 MeasureSpec.getSize 获取测量尺寸。
2.根据不同的测量模式,计算最终的宽度和高度。
3.调用 setMeasuredDimension 方法设置测量后的尺寸。
MeasureSpec 的模式:
* 1. UNSPECIFIED:父视图对子视图没有任何约束,子视图可以是任意大小。
* 2. EXACTLY:父视图已经确定了子视图的精确大小,子视图应该正好使用这个大小。
* 3. AT_MOST:子视图可以是指定大小内的任意大小,但不能超过这个大小。
onLayout(boolean changed, int left, int top, int right, int bottom) 计算View的位置并布局
changed:boolean 类型。当此参数为 true 时,表示布局的位置或大小发生了变化。
left:int 类型。父视图相对于其父视图的左边缘的左坐标。
top:int 类型。父视图相对于其父视图的顶边缘的顶部坐标。
right:int 类型。父视图相对于其父视图的左边缘的右坐标。
bottom:int 类型。父视图相对于其父视图的顶边缘的底部坐标。
onSizeChanged(int w, int h, int oldw, int oldh) 大小变化通知
onDraw(Canvas canvas) 绘制View
布局
绘制
触摸反馈
自定义组合View
继承系统控件或布局
直接继承View/ViewGroup
重写绘制方法 onDraw()
Canvas 的使用
Canvas 的绘制类方法: drawXXX() (关键参数:Paint)
Canvas 的辅助类方法:范围裁切和几何变换