一、Android graphics中包括了Canvas(畫布)、Paint(畫筆)、Color(顏色)、Bitmap(圖像)等常用的類。graphics具有繪製點、線、顏色、2D幾何圖形、圖像處理等功能。
1、 Canvas類的使用,Canvas類就是表示一塊畫布,你可以在上面畫 你想畫的東西。主要有以下方法:
l Canvas():創建一個空的畫布
l Canvas(Bitmap bitmap):以bitmap對象創建一個畫布,則將內容都繪製在bitmap上,bitmap不得爲null;
l Canvas(GL gl):在繪製3D效果時使用,與OpenGL有關;
l drawColor:設置畫布的背景色;
canvas.drawColor(Color.BLACK); //黑色背景
l setBitmap:設置具體的畫布;
l clipRect:設置顯示區域,即設置裁剪區
l isOpaque:檢測是否支持透明;
l rotate:旋轉畫布;
(1)繪製直線:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);
startX:起始端點的X座標。
startY:起始端點的Y座標。
stopX:終止端點的X座標。
stopY:終止端點的Y座標。
paint:繪製直線所使用的畫筆。
canvas.drawLine(60,
40,
100,
40,
p);// 畫線
canvas.drawLine(110,
40,
190,
80,
p);// 斜線
(2)繪製矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);
left:矩形的左邊位置。
top:矩形的上邊位置。
right:矩形的右邊位置。
bottom:矩形的下邊位置。
paint:繪製時所使用的畫筆。
canvas.drawRect(400, 90, 500, 209, p);// 長方形
canvas.drawRect(60, 60, 80, 80, p);// 正方形
注意:同時滿足Left <right , top <bottim,不然畫不出來
(3)繪製圓形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);
參數說明
cx:圓心的x座標。
cy:圓心的y座標。
radius:圓的半徑。
paint:繪製時所使用的畫筆。
canvas.drawCircle(330, 70, 60, p);// 圓
(4)繪製字符:canvas.drawText(String text, float x, float y, Paint paint);
Text:顯示的文本內容
X:x座標值
Y:y座標值
Paint:繪製時所使用的畫筆。
canvas.drawText("畫扇形和橢圓:", 500, 20, p); //在座標x,y(500,20)處顯示“畫扇形和橢圓”
注意:字體的樣式會被setStyle(),setTextSize()影響
(5)繪製圖形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);
(6)繪製多個點:canvas.drawPoints (float[] pts, Paint paint)
pts:繪製端點的數組,每個端點佔用兩個數據。
Paint:繪製時所使用的畫筆。
canvas.drawPoints(new float[]{60, 90, 65, 90, 70, 90}, p);//畫3個點
(7)繪製弧形:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圓弧的外輪廓矩形區域,弧形在這個定義的矩形內活動,若果定義一個長方形可以在裏面畫一個橢圓,正方形可以畫一個圓
startAngle: 圓弧起始角度,單位爲度,矩形的右邊棱的中心(如右邊棱長爲10則起始點爲5處開始畫)
sweepAngle: 圓弧掃過的角度,順時針方向。
useCenter: 如果爲True時,在繪製圓弧時將圓心包括在內,通常用來繪製扇形。
paint: 繪製時所使用的畫筆。
RectF oval1=new
RectF(550,80,680,180); //設定一個長方形
canvas.drawRect(oval1,
p);//在本矩形中進行畫弧形的
canvas.drawArc(oval1,
0,
180, false,
p);//從0度開始畫一個180度的弧形
canvas.drawArc(oval0,
270,
50, true,
p);//從270度開始畫一個50度帶有中心線的弧形
(8)繪製橢圓形:drawOval (RectF oval, Paint paint)
oval :指定圓弧的外輪廓矩形區域,弧形在這個定義的矩形內活動,若果定義一個長方形 可以在裏面畫一個橢圓,正方形可以畫一個圓
paint: 繪製時所使用的畫筆。
RectF oval1=new
RectF(550,80,680,180); //設定一個長方形
canvas.drawOval(oval1,
p);
//在長方形中畫橢圓形
Oval1.set(300,300,550,550); //把oval2重新設定一個新正方形
canvas.drawOval(oval1, p); //在正方形中畫圓形
2、Android graphics: Paint(畫筆)類使用,Pain類的常用屬性設置方法如下:
setAntiAlias(); //設置畫筆的鋸齒效果
p.setAntiAlias(true); //外圈無鋸齒,比較光滑 p.setAntiAlias(false) //效果與true相反
setColor(); //設置畫筆的顏色
p.setColor(Color.GREEN);// 設置綠色 注意區分大小寫
setARGB(); //設置畫筆的A、R、G、B值
setAlpha(int a); //設置畫筆的透明度
a取值範圍爲0~255,數值越小越透明
setTextSize(); //設置字體的尺寸
paint.setTextSize(15)
setStyle(); //設置畫筆的風格(空心或實心)
paint.setStyle(Panit.Style.STROKE); //空心
paint.setStyle(Panit.Style.FILL); //實心
setStrokeWidth(); //設置線寬度
paint.setStrokeWidth((float) 3.0); //線寬
getColor(); //獲取畫筆的顏色
p.setColor(Color.RED);// 設置紅色
3、 Shader類的使用:Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形。
Shader下面包括幾個直接子類,分別是BitmapShader、 ComposeShader、LinearGradient、RadialGradient、SweepGradient。
l BitmapShader主要用來渲染圖像
l LinearGradient 用來進行梯度渲染
l RadialGradient 用來進行環形渲染
l SweepGradient 用來進行梯度渲染
l ComposeShader則是一個 混合渲染
Shader類的使用,都需要先構建Shader對象,然後通過Paint的setShader方法設置渲染對象,然後設置渲染對象,然後再繪製時使用這個Paint對象即可
Shader mShader =
new LinearGradient(0,
0,
100,
100,
new int[] { Color.RED,
Color.GREEN,
Color.BLUE,
Color.YELLOW,
Color.LTGRAY
}, null,
Shader.TileMode.REPEAT);//創建一個LinearGrasient類型
p.setShader(mShader);
LinearGradient的作用是實現某一區域內顏色的線性漸變效果它有兩個構造函數
(1)LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
參數x0表示漸變的起始點x座標;參數y0表示漸變的起始點y座標;參數x1表示漸變的終點x座標;參數y1表示漸變的終點y座標 ;color0表示漸變開始顏色;color1表示漸變結束顏色;參數tile表示平鋪方式。
Shader.TileMode有3種參數可供選擇,分別爲CLAMP、REPEAT和MIRROR:
CLAMP的作用是如果渲染器超出原始邊界範圍,則會複製邊緣顏色對超出範圍的區域進行着色
REPEAT的作用是在橫向和縱向上以平鋪的形式重複渲染位圖
MIRROR的作用是在橫向和縱向上以鏡像的方式重複渲染位圖
(2)LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile);
參數x0表示漸變的起始點x座標;參數y0表示漸變的起始點y座標;參數x1表示漸變的終點x座標;參數y1表示漸變的終點y座標;參數colors表示漸變的顏色數組;參數positions用來指定顏色數組的相對位置;參數tile表示平鋪方式。通常,參數positions設爲null,表示顏色數組以斜坡線的形式均勻分佈。
4、moveTO,quadTo,lineTo用法;
moveTo:不會進行繪製,只用於移動移動畫筆
path2.moveTo(100, 320);//設置Path的起點(開始時將畫筆移動到座標100,320處)
quasTo:用於繪製圓滑曲線,即貝塞爾曲線
mPath.quadTo(x1, y1, x2, y2) (x1,y1) 爲控制點,(x2,y2)爲結束點。
同樣地,我們還是得需要moveTo來協助控制。
Path.moveTo(100, 500);
Path.quadTo(300, 100, 600, 500);
canvas.drawPath(Path, Paint);
lineTo :用於進行直線繪製。
mPath.lineTo(300, 300);
canvas.drawPath(mPath, mPaint);
5、drawPath方法用法:繪製任意多邊形
該方法用於在畫布上繪製任意多邊形,通過指定Path對象來實現。在Path對象中規劃了多邊形的路徑信息。該方法是繪製任意多邊形的主要方法,當然也可以使用drawLines方法來實現,但是drawPath方法更爲靈活、方便。
drawPath (Path path, Paint paint)
path:包含路徑信息的Path對象。
paint:繪製時所使用的畫筆。
Path path1=new
Path();
path1.moveTo(280,
300);
path1.lineTo(300,
300);
path1.lineTo(310,
310);
path1.lineTo(300,
320);
path1.lineTo(280,
320);
path1.lineTo(270,
310);
canvas.drawPath(path1,
p);
注意:如果需要繪製一個封閉的多邊形,則將最後一點的座標設置爲起始點座標即可。