自定义View(1)

自定义View的流程:

1:构造函数——(View初始化)

2:onMeasure——(测量View大小)

3:onSizeChanged——(确定View大小)

4:onLayout——(确定子View布局(自定义view包含子View时有用,决定View在viewGroup中的位置))

5:onDraw——(实际绘制内容)

6:提供接口——(控制View或者监听View的某些状态)

onMeasure():

而决定View的大小只需要两个值:宽详细测量值(widthMeasureSpec)和高详细测量值(heightMeasureSpec)。也可以把详细测量值理解为视图View想要的大小说明(想要的未必就是最终大小)。

对于详细测量值(measureSpec)需要两样东西来确定它,那就是大小(size)和模式(mode)。measureSpec,size,mode他们三个的关系,都封装在View类中的一个内部类里,名叫MeasureSpec

MeasureSpec使用了二进制去减少对象的分配

MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。

MeasureSpec由size和mode组成

测量的模式有三种:

UNSPECIFIE、EXACTLY、AT_MOST

UNSPECIFIE:

父view没有对子view施加任何约束,子view可以使任意大小(也就是未指定大小)

(UNSPECIFIE在源码中的处理和EXACTLY一样,当view的宽度值设置为0的时候或者没有设置宽高时,模式为UNSPECIFIE)

EXACTLY:

父view决定子view的确切大小,子View被限定在给定的边界里,忽略本身想要的大小

(当设置width或者height为match_parent时,模式为EXACTLY,因为子view会占据剩余容器的空间,所以它的大小是确定的)

AT_MOST

子View最大可以达到指定的大小

(当设置warp_content时,模式为AT_MOST,表示子view的大小最多是多少,这样子view会根据这个上限来这是自己的尺寸)

 

Paint有三种模式:

Paint.Style.FILL——填充内部;

Paint.Style.FILL_and_STROKE——填充内部和描边

Paint.Style.STORKE——描边









你可能感兴趣的:(android-记录)