Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 自定義View總結

Android 自定義View總結

編輯:關於Android編程

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的基本設置:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPrutsryxs76wyejWw6O6PC9wPg0KPHA+Y2FudmFzLmRyYXdDb2xvcihDb2xvci5CTFVFKTs8YnIgLz4NCmNhbnZhcy5kcmF3UkdCKDI1NSwgMjU1LCAwKTsgLy/V4sG9uPa5psTc0rvR+aOstrzKx9PDwLTJ6NbDsbO+sNHVyau1xKGjPC9wPg0KPHA+KDMpu/mxvry4us7NvNDOu+bWxjxiciAvPg0KMaGiu63Wsc/fPC9wPg0KPHA+dm9pZCBkcmF3TGluZSAoZmxvYXQgc3RhcnRYLCBmbG9hdCBzdGFydFksIGZsb2F0IHN0b3BYLCBmbG9hdCBzdG9wWSwgUGFpbnQgcGFpbnQpPC9wPg0KPHA+ss7K/aO6PGJyIC8+DQpzdGFydFg6v6rKvLXjWNf4seo8YnIgLz4NCnN0YXJ0WTq/qsq8teNZ1/ix6jxiciAvPg0Kc3RvcFg6veHK+LXjWNf4seo8YnIgLz4NCnN0b3BZOr3hyvi141nX+LHqPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> 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)文宗喎?/kf/yidong/wp/" target="_blank" class="keylink">WPGJyIC8+DQoxoaJQYWludM/gudjJ6NbDPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> //普通設置 paint.setStrokeWidth (5);//設置畫筆寬度 paint.setAntiAlias(true); //指定是否使用抗鋸齒功能,如果使用,會使繪圖速度變慢 paint.setStyle(Paint.Style.FILL);//繪圖樣式,對於設文字和幾何圖形都有效 paint.setTextAlign(Align.CENTER);//設置文字對齊方式,取值:align.CENTER、align.LEFT或align.RIGHT paint.setTextSize(12);//設置文字大小 //樣式設置 paint.setFakeBoldText(true);//設置是否為粗體文字 paint.setUnderlineText(true);//設置下劃線 paint.setTextSkewX((float) -0.25);//設置字體水平傾斜度,普通斜體字是-0.25 paint.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類型字體,所以可以實現繪制帶圖片的擴展文字(待續),而且還能截取一部分繪制

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved