close

Android 中的圖形處理
2D部份是由android SDK 內部自己提供的
3D部份則是用Open GL
而今天我們要講得Canvas 是2D的繪圖類


今天我們要說的主角---Canvas 相當於Android 的畫布
我們可以想成這畫布是一塊內存空間,也就是一個 Bitmap
Canvas 可說是這Bitmap 的 API
提供一整套在這Bitmap 上繪圖的操作方法

 

一般來說 Canvas 會在每一個 View 的 onDraw 方法中看到
每個一View 在顯示之前
都會透過 View.onDraw 來繪製畫面

 

那就讓我們來看看如何操作吧

 

點我看官網的Canvas method

 

從官網可以看到,所有繪圖有關的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

 

 

 

 

 

 

 

 

 

 


arrow
arrow
    全站熱搜

    顏澤偉 發表在 痞客邦 留言(0) 人氣()