標籤:
Android 自訂View的一些總結
- Paint與Canvas
下面先說下Paint的基本設定函數:
paint.setAntiAlias(true);//消除鋸齒功能
paint.setColor(Color.RED); //設定畫筆顏色
paint.setStyle(Style.FILL);//設定填充樣式
paint.setStrokeWidth(30);//設定畫筆寬度
paint.setShadowLayer(10, 15, 15, Color.GREEN);//設定陰影
(1)void setStyle(Paint.Style style) 設定填充樣式
Paint.Style.FILL :填充內部
Paint.Style.FILL_AND_STROKE :填充內部和描邊
Paint.Style.STROKE :僅描邊
看下這三個類型的不同,下面以畫的一個圓形為例:
(2)setShadoeLayer(float radius,float dx,float dy,int color) 添加陰影
參數:
radius:陰影的傾斜度
dx:水平位移
dy:垂直位移
使用代碼:
paint.setShadowLayer(10, 15, 15, Color.GREEN);//設定陰影
然後是Canvas的基本設定:
畫布背景設定:
canvas.drawColor(Color.BLUE);
canvas.drawRGB(255, 255, 0); //這兩個功能一樣,都是用來設定背景顏色的。
(3)基本幾何圖形繪製
1、畫直線
void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
參數:
startX:開始點X座標
startY:開始點Y座標
stopX:結束點X座標
stopY:結束點Y座標
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(5);//設定畫筆寬度canvas.drawLine(100, 100, 200, 200, paint);
2.多條直線
void drawLines (float[] pts, Paint paint)
void drawLines (float[] pts, int offset, int count, Paint paint)
參數:
pts:是點的集合,大家下面可以看到,這裡不是形成連接線,而是每兩個點形成一條直線,pts的組織方式為{x1,y1,x2,y2,x3,y3,……}
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(5);//設定畫筆寬度float []pts={10,10,100,100,200,200,400,400};canvas.drawLines(pts, paint);
3.點
void drawPoint (float x, float y, Paint paint)
參數:
float X:點的X座標
float Y:點的Y座標
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(15);//設定畫筆寬度canvas.drawPoint(100, 100, paint);
4、多個點
void drawPoints (float[] pts, Paint paint)
void drawPoints (float[] pts, int offset, int count, Paint paint)
參數:
float[] pts:點的合集,與上面直線一直,樣式為{x1,y1,x2,y2,x3,y3,……}
int offset:集合中跳過的數值個數,注意不是點的個數!一個點是兩個數值;
count:參與繪製的數值的個數,指pts[]裡人數值個數,而不是點的個數,因為一個點是兩個數值
下面舉例說明上面offset與count的含義:(跳過第一個點,畫出後面兩個點,第四個點不畫),注意一個點是兩個數值!
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(15);//設定畫筆寬度float []pts={10,10,100,100,200,200,400,400};canvas.drawPoints(pts, 2, 4, paint);
5、矩形工具類RectF與Rect
這兩個都是矩形輔助類,區別不大,用哪個都行,根據四個點構建一個矩形結構;在畫圖時,利用這個矩形結構可以畫出對應的矩形或者與其它圖形Region相交、相加等等;
RectF:
建構函式有下面四個,但最常用的還是第二個,根據四個點構造出一個矩形;
RectF()
RectF(float left, float top, float right, float bottom)
RectF(RectF r)
RectF(Rect r)
Rect
建構函式如下,最常用的也是根據四個點來構造矩形
Rect()
Rect(int left, int top, int right, int bottom)
Rect(Rect r)
6、矩形
void drawRect (float left, float top, float right, float bottom, Paint paint)
void drawRect (RectF rect, Paint paint)
void drawRect (Rect r, Paint paint)
參數:
第一個的寫法是直接傳入矩形的四個點,畫出矩形
第二、三個建構函式是根據傳入RectF或者Rect矩形變數來指定所畫的矩形的
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(15);//設定畫筆寬度canvas.drawRect(10, 10, 100, 100, paint);//直接構造RectF rect = new RectF(120, 10, 210, 100);canvas.drawRect(rect, paint);//使用RectF構造Rect rect2 = new Rect(230, 10, 320, 100); canvas.drawRect(rect2, paint);//使用Rect構造
7、圓角矩形
void drawRoundRect (RectF rect, float rx, float ry, Paint paint)
參數:
RectF rect:要畫的矩形
float rx:產生圓角的橢圓的X軸半徑
float ry:產生圓角的橢圓的Y軸半徑
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(15);//設定畫筆寬度RectF rect = new RectF(100, 10, 300, 100);canvas.drawRoundRect(rect, 20, 10, paint);
8、圓形
void drawCircle (float cx, float cy, float radius, Paint paint)
參數:
float cx:圓心點X軸座標
float cy:圓心點Y軸座標
float radius:圓的半徑
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//設定填充樣式 paint.setStrokeWidth(15);//設定畫筆寬度canvas.drawCircle(150, 150, 100, paint);
9、橢圓
橢圓是根據矩形產生的,以矩形的長為橢圓的X軸,矩形的寬為橢圓的Y軸,建立的橢圓圖形
void drawOval (RectF oval, Paint paint)
參數:
RectF oval:用來產生橢圓的矩形
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.STROKE);//填充樣式改為描邊 paint.setStrokeWidth(5);//設定畫筆寬度RectF rect = new RectF(100, 10, 300, 100);canvas.drawRect(rect, paint);//畫矩形paint.setColor(Color.GREEN);//更改畫筆顏色canvas.drawOval(rect, paint);//同一個矩形畫橢圓
10、弧
弧是橢圓的一部分,而橢圓是根據矩形來產生的,所以弧當然也是根據矩形來產生的;
void drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
參數:
RectF oval:產生橢圓的矩形
float startAngle:弧開始的角度,以X軸正方向為0度
float sweepAngle:弧持續的角度
boolean useCenter:是否有弧的兩邊,True,還兩邊,False,只有一條弧
(1)將畫筆設為描邊,效果:
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.STROKE);//填充樣式改為描邊 paint.setStrokeWidth(5);//設定畫筆寬度RectF rect1 = new RectF(100, 10, 300, 100);canvas.drawArc(rect1, 0, 90, true, paint);RectF rect2 = new RectF(400, 10, 600, 100);canvas.drawArc(rect2, 0, 90, false, paint);
(二)、將畫筆設為填充
Paint paint=new Paint();paint.setColor(Color.RED); //設定畫筆顏色 paint.setStyle(Style.FILL);//填充樣式改為描邊 paint.setStrokeWidth(5);//設定畫筆寬度RectF rect1 = new RectF(100, 10, 300, 100);canvas.drawArc(rect1, 0, 90, true, paint);RectF rect2 = new RectF(400, 10, 600, 100);canvas.drawArc(rect2, 0, 90, false, paint);
(4)文字
1、Paint相關設定
//普通設定paint.setStrokeWidth (5);//設定畫筆寬度paint.setAntiAlias(true); //指定是否使用消除鋸齒功能,如果使用,會使繪圖速度變慢paint.setStyle(Paint.Style.FILL);//繪圖樣式,對於設文字和幾何圖形都有效paint.setTextAlign(Align.CENTER);//設定文字對齊,取值:align.CENTER、align.LEFT或align.RIGHTpaint.setTextSize(12);//設定文字大小//樣式設定paint.setFakeBoldText(true);//設定是否為粗體文字paint.setUnderlineText(true);//設定底線paint.setTextSkewX((float) -0.25);//設定字型水平傾斜度,普通斜體字是-0.25paint.setStrikeThruText(true);//設定帶有刪除線效果//其它設定paint.setTextScaleX(2);//只會將水平方向展開,高度不會變
2.canvas繪圖方式
1)、普通水平繪製
建構函式:
void drawText (String text, float x, float y, Paint paint)
void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
void drawText (String text, int start, int end, float x, float y, Paint paint)
void drawText (char[] text, int index, int count, float x, float y, Paint paint)
說明:
第一個建構函式:最普通簡單的建構函式;
第三、四個建構函式:實現截取一部分字型給圖;
第二個建構函式:最強大,因為傳入的可以是charSequence類型字型,所以可以實現繪製帶圖片的擴充文字(待續),而且還能截取一部分繪製
Android 自訂View的一些總結