基本概念
Canvas:我們可以稱之為畫布蛆楞,能夠在上面繪制各種東西莺戒,是安卓平臺2D圖形繪制的基礎(chǔ),非常強(qiáng)大。
餅狀圖實(shí)現(xiàn)
餅狀圖
關(guān)鍵步驟及代碼:
-
1 獲取寬高,計算出半徑R
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); //1 獲取寬高,計算出半徑R width = w; height = h; circleR = Math.min(width,height)/2; }
2 移動到圓心
-
3 根據(jù)角度繪制 『弧度』
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);//2 移動到圓心開始繪制 canvas.translate(width/2,height/2); RectF rectF = new RectF(-circleR,-circleR,circleR,circleR); for (int index=0;index < list.size();index++){ PieData pieData =list.get(index); mPaint.setColor(getResources().getColor(pieData.color)); //3 根據(jù)角度確定繪制弧度 canvas.drawArc(rectF,currentAngle,pieData.angle,true,mPaint); currentAngle = currentAngle+pieData.angle; } }
兩個簡單的圖形
兩個有趣的圖形
-
1 圓形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(width/2,height/2);// 繪制兩個圓形 canvas.drawCircle(0,0,MAX_RADIU,mPaint); canvas.drawCircle(0,0,MIN_RADIU,mPaint); for (int index =0;index < 20; index++){ canvas.drawLine(0,MIN_RADIU,0,MAX_RADIU,mPaint); canvas.rotate(20); }
}
-
2 正方形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(width/2,height/2);for (int index =0;index < 10; index++){ //對畫布進(jìn)行縮放 canvas.scale(0.8f,0.8f); canvas.drawRect(rectF,mPaint); }
}
Demo源碼:
參考文章
簡書當(dāng)前Markdown語法與效果
安卓自定義View教程目錄
簡單造輪子系列 - 自定義支持手勢旋轉(zhuǎn)的Android Radar Chart(蛛網(wǎng)雷達(dá)圖)
自定義View——畫一個雷達(dá)圖