1. 程式人生 > >Android Canvas類和Paint類(草稿版)

Android Canvas類和Paint類(草稿版)

Canvas物件中可以繪製:

複製程式碼

1)  drawArc():繪製圓弧;
2)  drawBitmap():繪製Bitmap影象;
3)  drawCircle():繪製圓圈;
4)  drawLine():繪製線條;
5)  drawOval():繪製橢圓;
6)  drawPath():繪製Path路徑;
7)  drawPicture():繪製Picture圖片;
8)  drawRect():繪製矩形;
9)  drawRoundRect():繪製圓角矩形;
10) drawText():繪製文字;
11) drawVertices():繪製頂點。

複製程式碼

  Canvas物件的其他方法:

1)  canvas.save():把當前繪製的影象儲存起來,讓後續的操作相當於是在一個新圖層上繪製;
2)  canvas.restore():把當前畫布調整到上一個save()之前的狀態;
3)  canvas.translate(dx, dy):把當前畫布的原點移到(dx, dy)點,後續操作都以(dx, dy)點作為參照;
4)  canvas.scale(x, y):將當前畫布在水平方向上縮放x倍,豎直方向上縮放y倍;
5)  canvas.rotate(angle):將當前畫布順時針旋轉angle度。

Paint類中有如下方法:

  1、圖形繪製:

1)  setArgb(int a, int r, int g, int b):設定繪製的顏色,a表示透明度,r、g、b表示顏色值;
2)  setAlpha(int a):設定繪製的圖形的透明度;
3)  setColor(int color):設定繪製的顏色;
4)  setAntiAlias(boolean a):設定是否使用抗鋸齒功能,抗鋸齒功能會消耗較大資源,繪製圖形的速度會減慢;
5)  setDither(boolean b):設定是否使用影象抖動處理,會使影象顏色更加平滑飽滿,更加清晰;
6)  setFileterBitmap(Boolean b):設定是否在動畫中濾掉Bitmap的優化,可以加快顯示速度;
7)  setMaskFilter(MaskFilter mf):設定MaskFilter來實現濾鏡的效果;
8)  setColorFilter(ColorFilter cf):設定顏色過濾器,可以在繪製顏色時實現不同顏色的變換效果;
9)  setPathEffect(PathEffect pe):設定繪製的路徑的效果;
10) setShader(Shader s):設定Shader繪製各種漸變效果;
11) setShadowLayer(float r, int x, int y, int c):在圖形下面設定陰影層,r為陰影角度,x和y為陰影在x軸和y軸上的距離,c為陰影的顏色;
12) setStyle(Paint.Style s):設定畫筆的樣式:FILL實心;STROKE空心;FILL_OR_STROKE同時實心與空心;
13) setStrokeCap(Paint.Cap c):當設定畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式;
14) setStrokeJoin(Paint.Join j):設定繪製時各圖形的結合方式;
15) setStrokeWidth(float w):當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的粗細度;
16) setXfermode(Xfermode m):設定圖形重疊時的處理方式;

 

2、文字繪製:

1)  setTextAlign(Path.Align a):設定繪製的文字的對齊方式;
2)  setTextScaleX(float s):設定文字在X軸的縮放比例,可以實現文字的拉伸效果;
3)  setTextSize(float s):設定字號;
4)  setTextSkewX(float s):設定斜體文字,s是文字傾斜度;
5)  setTypeFace(TypeFace tf):設定字型風格,包括粗體、斜體等;
6)  setUnderlineText(boolean b):設定繪製的文字是否帶有下劃線效果;
7)  setStrikeThruText(boolean b):設定繪製的文字是否帶有刪除線效果;
8)  setFakeBoldText(boolean b):模擬實現粗體文字,如果設定在小字型上效果會非常差;
9)  setSubpixelText(boolean b):如果設定為true則有助於文字在LCD螢幕上顯示效果;

3、其他方法:

1)  getTextBounds(String t, int s, int e, Rect b):將頁面中t文字從s下標開始到e下標結束的所有字元所佔的區域寬高封裝到b這個矩形中;
2)  clearShadowLayer():清除陰影層;
3)  measureText(String t, int s, int e):返回t文字中從s下標開始到e下標結束的所有字元所佔的寬度;
4)  reset():重置畫筆為預設值。

 

這裡需要就幾個方法解釋一下:

1、setPathEffect(PathEffect pe):設定繪製的路徑的效果:

  常見的有以下幾種可選方案:

複製程式碼

1)  CornerPathEffect:可以用圓角來代替尖銳的角;
2)  DathPathEffect:虛線,由短線和點組成;
3)  DiscretePathEffect:荊棘狀的線條;
4)  PathDashPathEffect:定義一種新的形狀並將其作為原始路徑的輪廓標記;
5)  SumPathEffect:在一條路徑中順序新增引數中的效果;
6)  ComposePathEffect:將兩種效果組合起來,先使用第一種效果,在此基礎上應用第二種效果。

複製程式碼

2、setXfermode(Xfermode m):設定圖形重疊時的處理方式:

  關於Xfermode的多種效果,我們可以參考下面一張圖:

  在使用的時候,我們需要通過paint. setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX))來設定,XXX是上圖中的某種模式對應的常量引數,如DST_OUT。

  這16中情況的具體解釋如下:

複製程式碼

1.PorterDuff.Mode.CLEAR:所繪製不會提交到畫布上。
2.PorterDuff.Mode.SRC:顯示上層繪製圖片
3.PorterDuff.Mode.DST:顯示下層繪製圖片
4.PorterDuff.Mode.SRC_OVER:正常繪製顯示,上下層繪製疊蓋。
5.PorterDuff.Mode.DST_OVER:上下層都顯示。下層居上顯示。
6.PorterDuff.Mode.SRC_IN:取兩層繪製交集。顯示上層。
7.PorterDuff.Mode.DST_IN:取兩層繪製交集。顯示下層。
8.PorterDuff.Mode.SRC_OUT:上層繪製非交集部分。
9.PorterDuff.Mode.DST_OUT:取下層繪製非交集部分。
10.PorterDuff.Mode.SRC_ATOP:取下層非交集部分與上層交集部分
11.PorterDuff.Mode.DST_ATOP:取上層非交集部分與下層交集部分
12.PorterDuff.Mode.XOR:異或:去除兩圖層交集部分
13.PorterDuff.Mode.DARKEN:取兩圖層全部區域,交集部分顏色加深
14.PorterDuff.Mode.LIGHTEN:取兩圖層全部,點亮交集部分顏色
15.PorterDuff.Mode.MULTIPLY:取兩圖層交集部分疊加後顏色
16.PorterDuff.Mode.SCREEN:取兩圖層全部區域,交集部分變為透明色

 參考

https://www.cnblogs.com/itgungnir/p/6217447.html