Android自定義View學習(一)

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

相關文章
相關標籤/搜索