2020-04-16

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 绘制装饰,如滚动条等等

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容