Android 中的圖形處理
2D部份是由android SDK 內部自己提供的
3D部份則是用Open GL
而今天我們要講得Canvas 是2D的繪圖類
今天我們要說的主角---Canvas 相當於Android 的畫布
我們可以想成這畫布是一塊內存空間,也就是一個 Bitmap
Canvas 可說是這Bitmap 的 API
提供一整套在這Bitmap 上繪圖的操作方法
一般來說 Canvas 會在每一個 View 的 onDraw 方法中看到
每個一View 在顯示之前
都會透過 View.onDraw 來繪製畫面
那就讓我們來看看如何操作吧
從官網可以看到,所有繪圖有關的method 都是 draw 開頭的
裡面包括了弧線(arcs)、填充色(argb & color)、Bitmap、圓(circle & oval)、點(point)…等。
用這些方法就可以繪製出自己想要的圖像囉
下面就來些範例吧:
RectF rect = new RectF(0, 0, 100, 100);
canvas.drawArc(rect, //弧線所使用的矩形區域大小
0, //開始角度
90, //掃過的角度
false, //是否使用中心
paint);
========================================================
RectF rect = new RectF(0, 0, 100, 100);
canvas.drawArc(rect,
0,
90,
true,
paint);
========================================================
Path path = new Path(); //定義一條路徑
path.moveTo(10, 10); //移動到坐標10,10
path.lineTo(50, 60);
path.lineTo(200,80);
path.lineTo(10, 10);
canvas.drawPath(path, paint);
========================================================
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
canvas.translate(canvas.getWidth()/2, 200);
//將位置移動畫布的坐標點 150,150
canvas.drawCircle(0, 0, 100, paint);
//使用path繪制路徑文字
canvas.save();
canvas.translate(-75, -75);
Path path = new Path();
path.addArc(new RectF(0,0,150,150), -180, 180);
Paint citePaint = new Paint(paint);
citePaint.setTextSize(14);
citePaint.setStrokeWidth(1);
canvas.drawTextOnPath("http://www.android777.com"
, path, 28, 0, citePaint);
canvas.restore();
Paint tmpPaint = new Paint(paint); //小刻度畫筆
tmpPaint.setStrokeWidth(1);
float y=100;
int count = 60; //總刻度數
for(int i=0 ; i <count ; i++){
if(i%5 == 0){
canvas.drawLine(0f, y, 0, y+12f, paint);
canvas.drawText(String.valueOf(i/5+1)
, -4f, y+25f, tmpPaint);
}else{
canvas.drawLine(0f, y, 0f, y +5f, tmpPaint);
}
canvas.rotate(360/count,0f,0f); //旋轉畫布
}
//繪製指針
tmpPaint.setColor(Color.GRAY);
tmpPaint.setStrokeWidth(4);
canvas.drawCircle(0, 0, 7, tmpPaint);
tmpPaint.setStyle(Paint.Style.FILL);
tmpPaint.setColor(Color.YELLOW);
canvas.drawCircle(0, 0, 5, tmpPaint);
canvas.drawLine(0, 10, 0, -65, paint);
資料來源:
https://developer.android.com/reference/android/graphics/Canvas.html
http://blog.csdn.net/rhljiayou/article/details/7212620
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html