自定義繪制圖片--參照上文忍级,繪制了一個鐘表
其實學(xué)習(xí)知識,只有自己一邊繪制伪朽,一邊了解才會學(xué)習(xí)的快呢轴咱,文章最后會附上項目地址:
不管是繪制多么復(fù)雜的控件,都需要一步一步的進(jìn)行,
-
首先是在繪制之前先重寫onMeasure()方法烈涮,測量和設(shè)置控件的一些大小
setMeasuredDimension(measure(widthMeasureSpec, true), measure(heightMeasureSpec, false));int specMode = MeasureSpec.getMode(origin);//得到模式 int specSize = MeasureSpec.getSize(origin);//得到尺寸
判斷specMode:
// EXACTLY是精確尺寸朴肺,當(dāng)我們將控件的layout_width或layout_height指定為具體數(shù)值時如"50dip",或者為FILL_PARENT是坚洽,都是控件大小已經(jīng)確定的情況戈稿,都是精確尺寸。
case MeasureSpec.EXACTLY:
//AT_MOST是最大尺寸讶舰,當(dāng)控件的layout_width或layout_height指定為WRAP_CONTENT時鞍盗,控件大小一般隨著控件的子空間或內(nèi)容進(jìn)行變化需了,此時控件尺寸只要不超過父控件允許的最大尺寸即可
case MeasureSpec.AT_MOST:
//UNSPECIFIED是未指定尺寸,這種情況不多般甲,一般都是父控件是AdapterView肋乍,通過measure方法傳入的模式。
case MeasureSpec.UNSPECIFIED:
-
首先是繪制外面最大的圓形
//畫外圓
float borderWidth = DEFAULT_BORDER_WIDTH;
float r = Math.min(getHeight() / 2, getWidth() / 2) - borderWidth / 2;//半徑
Paint paintCircle = new Paint();/** * Paint.Style.FILL :填充內(nèi)部 Paint.Style.FILL_AND_STROKE :填充內(nèi)部和描邊 Paint.Style.STROKE :僅描邊 */ paintCircle.setStyle(Paint.Style.STROKE);//設(shè)置填充樣式 paintCircle.setAntiAlias(true);//抗鋸齒功能 paintCircle.setStrokeWidth(borderWidth);//設(shè)置畫筆寬度 canvas.drawCircle(getWidth() / 2, getHeight() / 2, r, paintCircle);//畫圓,圓心在中心位置,半徑為長寬小者的一半
不知道為什么復(fù)制代碼的時候敷存,格式就亂了還要一個一個的去修改住拭,這里我就不貼了,直接上傳我的
github項目
有興趣的同學(xué)可以看下历帚,代碼里面的注視很全,應(yīng)該都可以看得懂