Android Canvas類和Paint類(草稿版)
阿新 • • 發佈:2018-12-18
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:取兩圖層全部區域,交集部分變為透明色
參考