方法定義 | 說明 | 備註 |
public void set(Paint src) | 根據已有畫筆的屬性進行賦值 | |
public void setColor(int color) | 設置顏色 | |
public void setAlpha(int alpha) | 設置透明度,alpha爲透明度,取值範圍爲0~255,數值越小越透明 | |
public void setARGB(int a, int r, int g, int b) | 設置透明度和顏色,a表明透明度,r,g,b表明顏色值 | |
public void setAntiAlias(boolean aa) | 設置是否使用抗鋸齒功能,比較耗資源,減慢繪製速度html
|
詳細的解釋見3.1 |
public void setDither(boolean dither) | 設定是否使用圖像抖動,如true,繪製出來的圖片顏色更飽滿、清晰 java
|
詳細的解釋見3.2 |
public void setStyle(android.graphics._Original_Paint.Style style) | 設置畫筆的樣式,爲FILL,FILL_OR_STROKE,或STROKE android |
說明:當咱們在調用drawCircle、drawOval、drawArc、drawRect等方法時,咱們既能夠繪製對應圖形的填充面,也能夠只繪製該圖形的輪廓線,控制的關鍵在於畫筆Paint中的style。Paint經過setStyle方法設置要繪製的類型,style有取三種值:Paint.Style.FILL、Paint.Style.STROKE和Paint.Style.FILL_AND_STROKE。canvas 當style爲FILL時,繪製是填充面,FILL是Paint默認的style;ide 當style爲STROKE時,繪製的是圖形的輪廓線;性能 當style爲FILL_AND_STROKE時,同時繪製填充面和輪廓線,不過這種狀況用的很少,由於填充面和輪廓線是用同一種顏色繪製的,區分不出輪廓線的效果。字體 |
public void setStrokeCap(Cap cap) | 當畫筆樣式爲STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式,如圓形樣式 Cap.ROUND,或方形樣式Cap.SQUARE | |
public void setStrokeWidth(float width) | 當畫筆樣式爲STROKE或FILL_OR_STROKE時,設置筆刷的粗細度 |
方法 | 說明 | 備註 |
public void setTextSize(float textSize) | 設置文字大小 | |
public void setTextScaleX(float scaleX) | 設置文字x軸的縮放比例,能夠實現文字的拉伸效果 | |
public void setTextSkewX(float skewX) | 設置文字傾斜弧度 | |
public void setUnderlineText(boolean flag) | 設置文字下劃線效果 | |
public void setStrikeThruText(boolean flag) | 設置刪除線效果 | |
public Typeface setTypeface(Typeface typeface) | 設置字體風格 | 接收參數爲 Typeface對象,在Typeface.java類中,比較簡單的,有defaultFromStyle方法返回Typeface對象動畫 代碼:paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); spa |
public void setTextAlign(android.graphics._Original_Paint.Align align) | 設置文字的對齊方向 | 可選LEFT、CENTER和RIGHT。 |
這個類至關於一個畫布,你能夠在裏面畫不少東西;.net
咱們能夠把這個Canvas理解成系統提供給咱們的一塊內存區域(但實際上它只是一套畫圖的API,真正的內存是下面的Bitmap),並且它還提供了一整套對這個內存區域進行操做的方法,全部的這些操做都是畫圖API。也就是說在這種方式下咱們已經能一筆一劃或者使用Graphic來畫咱們所須要的東西了,要畫什麼要顯示什麼都由咱們本身控制。
這種方式根據環境還分爲兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區別就是能夠在SurfaceView中定義一個專門的線程來完成畫圖工做,應用程序不須要等待View的刷圖,提升性能。前面一種適合處理量比較小,幀率比較小的動畫,好比說象棋遊戲之類的;然後一種主要用在遊戲,高品質動畫方面的畫圖。
方法 | 說明 | 代碼例子 |
設置ARGB、顏色填充畫布 | public void drawARGB(int a, int r, int g, int b) {} public void drawColor(int color) {} public void drawRGB(int r, int g, int b) {} |
canvas.drawARGB(50, 255, 0, 0);//參數即爲ARGB的值 |
畫點 | public native void drawPoint(float x, float y, Paint paint); | //參數比較明顯,就是點的座標,須要注意的是,在繪製點以前,須要設置畫筆的寬度,不然不能畫出來 paint.setStrokeWidth(13); //另外,還能夠設置畫筆的樣式,來指定所畫的點的樣式,圓形仍是方形 paint.setStrokeCap(Paint.Cap.ROUND);//或者paint.setStrokeCap(Paint.Cap.BUTT); canvas.drawPoint(100, 100, paint); |
畫直線 | public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {} | canvas.drawLine(100, 100, 500, 500, paint);//參數爲起點和終點的XY座標 |
畫圓 | public void drawCircle(float cx, float cy, float radius, Paint paint) {} | canvas.drawCircle(200, 200, 100, paint);//參數爲圓心座標和半徑 |
繪製矩形 | public void drawRect(float left, float top, float right, float bottom, Paint paint) {} public void drawRect(RectF rect, Paint paint) {} public void drawRect(Rect r, Paint paint) {} |
// RectF 和 Rect 均可用來定義一個矩形區域,主要區別是參數類型不一樣,一個是int類型,一個是float類型 private RectF mRectF; mRectF = new RectF(100, 100, 200, 500); canvas.drawRect(mRectF, paint); |
繪製圓角矩形 | public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 500, 500);//定義一個區域 canvas.drawRoundRect(mRectF, 20, 50, paint); //第2、三個參數分別定義x和y方向的圓角弧度 |
繪製一個區域的內切圓或橢圓(視所定義的矩形而定) | public void drawOval(RectF oval, Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 200, 500); canvas.drawOval(mRectF, paint); |
繪製弧形區域 | public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 200, 200);//定義一個矩形區域 canvas.drawArc(mRectF, 0, 90, false, paint); //第二個參數爲起始弧度,第三個爲終止弧度,第四個爲顯示方式 |
繪製文本 | public void drawText(String text, float x, float y, Paint paint) {} public void drawText(char[] text, int index, int count, float x, float y, Paint paint) {} public void drawText(String text, int start, int end, float x, float y, Paint paint) {} |
canvas.drawText("hwgt", 100, 100, paint); canvas.drawText(new char [] {'h','w','g','t','3','1','3','3'}, 2, 3, 100, 100, paint); canvas.drawText("hwgt3133", 2, 4, 100, 100, paint); //含頭不含尾 |
按照指定點的座標繪製文本 | public void drawPosText(String text, float[] pos, Paint paint) {} public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {} |
canvas.drawPosText("hwgt", new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint); canvas.drawPosText(new char[]{'h','w','g','t'}, 3, 1, new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint); //推薦使用第二個方法,if (index < 0 || index + count > text.length || count*2 > pos.length),就會報錯 |
按照指定的路徑繪製文本 | public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {} |
該方法做用是抗鋸齒,什麼意思呢,咱們看下效果圖,就知道了
左邊是沒有設置抗鋸齒的,右邊是設置了抗鋸齒的,邊界明顯變模糊了。
該方法是設置防抖動。
咱們先看下沒有設置防抖動的繪製出來的圖
而後咱們看下設置了防抖動的繪製出來的圖
第二個是否是比第一個圖柔和點,這就是防抖動的效果。
該方法是繪製矩形
new Rect(150, 75, 260, 120)
這個構造方法須要四個參數這四個參數 指明瞭什麼位置 ?咱們就來解釋怎麼畫 這個 矩形
這四個 參數 分別表明的意思是:left top right bottom 上下左右唄。啊,不是 是 左 上 右 下。 下面給你們解釋
left : 矩形左邊的X座標 150 ---->圖片中的A點
top: 矩形頂部的Y座標 75 ---->圖片中的B點
right : 矩形右邊的X座標 260 ----->圖片中的C點
bottom: 矩形底部的Y座標 120 ------->圖片中的D點
說白了就是左上角的座標是(150,75),右下角的座標是(260,120),這樣就好理解了
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
關於圓弧起始角度的解釋:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(mRectF, 0, 90, false, mPaint); mPaint.setColor(Color.RED); canvas.drawArc(mRectF, 90, 90, false, mPaint); mPaint.setColor(Color.YELLOW); canvas.drawArc(mRectF, 180, 90, false, mPaint); mPaint.setColor(Color.GRAY); canvas.drawArc(mRectF, 270, 90, false, mPaint); canvas.drawRect(mRectF,mPaint2); }
效果以下圖所示:
關於useCenter經過下面來進行描述:
參考地址:
http://www.cnblogs.com/hwgt/p/5416866.html
http://blog.csdn.net/rhljiayou/article/details/7212620/
一、android繪圖Paint.setAnitAlias()和Paint.setDither()方法的做用
http://blog.csdn.net/lovexieyuan520/article/details/50732023
二、Android Paint setAntiAlias
http://blog.csdn.net/shichaosong/article/details/21157751
三、關於Rect參數解釋的比較好的文章
http://blog.csdn.net/chengyingzhilian/article/details/7452082
四、關於drawArc方法解釋參考的文章
http://blog.sina.com.cn/s/blog_783ede0301012im3.html
http://blog.csdn.net/senyangs/article/details/44240307