Android實現 畫幾何圖形總結

一、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座標值

Yy座標值

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();                 //設置畫筆的ARGB

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);

注意:如果需要繪製一個封閉的多邊形,則將最後一點的座標設置爲起始點座標即可。

發佈了22 篇原創文章 · 獲贊 29 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章