AT_MOST , EXACTLY,UNSPECIFIED 三种模式
当控件的layout_width或layout_height指定为wrap_content时,为AT_MOSTcanvas
当控件的layout_width或layout_height指定为match_parent或具体数值时,为EXACTLYcode
MeasureSpec.UNSPECIFIED是未指定尺寸,这种状况很少图片
onMeasure 方法的重写
//源码中的方法 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); }
public static int getDefaultSize(int size, int measureSpec) { int result = size; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); switch (specMode) { case MeasureSpec.UNSPECIFIED: result = size; break; case MeasureSpec.AT_MOST: case MeasureSpec.EXACTLY: result = specSize; break; } return result; }
- canvas.drawRect(left, top, right, bottom, paint);
第一个参数和第二个参数表示矩形左上顶点距离父容器左边和顶边的距离 第三个参数和第四个参数表示矩形右下顶点距离父容器左边和顶边的距离 - canvas.drawText(String text ,int x,int y,Paint paint);
图中mPaint.getTextBounds方法获取到的矩形。 x,y的坐标值指的是图中黄色星星的位置get
Rect r = new Rect(); mPaint.getTextBounds(mTitleText,0,mTitleText.length(), r);
三个方法的区别:源码
getDimension: 256.500000 返回的是float型的 pxit
getDimensionPixelSize: 257 四舍五入的int型的 pxio
getDimensionPixelOffset:256 舍去小数位的int型的 pxclass