Android 自定义View 理解
1.View 的绘制基本由 measure()、layout()、draw() 三个函数完成
1.1 measure() 测量View 的宽高,相关方法有 measure(), setMeasureDimension(), onMeasure().
1.2 layout() 计算当前View 及子View的位置 相关方法 layout(),onLayout(), setFrame().
1.3 draw() 视图绘制工作 相关方法有 draw(),onDraw().
2.View 获取自身被高度
width=getRight()-getLift()
height=getBottom()-getTop()
2.1 Measure()
MeasureSpec是View 的内部类,它封装了一个View 的尺寸,在onMeasure()当中会根据这个MeasureSpec 的值来确定View 的宽高
MeasureSpec的值保存在一个int 值当中。32位,前两位表示模式mode 后30位表示大小size.即MeasureSpec=mode+size
一共存在三种mode: UNSPECIFIED(无限制,View 对尺寸没有任何限制,View设置为多就应该为多大)、EXACTLY(View 需要一个精确值 eg: match_parent)、AT_MOST(最大模式,View 的尺寸有一个最大值,eg: wrap_content)
2.2 Layout()
layout() 方法中通过setOpticalFrame(l,t,r,b)或setFrame(l,t,r,b) 方法对View 自身的位置进行了设置,所以onLayout(changed,l,t,r,b)方法主要是ViewGroup 对子View 的位置进行计算。
2.3 Draw()
draw流程也就是View 绘制到屏幕上的过程
2.3.1 如有需要绘制背景
2.3.2 有必要,保存当前canvas
2.3.3 绘制View 的内容
2.3.4 绘制子View
2.3.5 如果有必要,绘制边缘、阴影等效果
2.3.6 绘制装饰,如滚动条等等