這篇文章主要介紹下畫筆Paint和畫布Canvas的基本使用
1.Paint
創建對象Paint mPaint = new Paint();
常用的基本方法有 :
mPaint.setAntiAlias(true); (抗鋸齒)
mPaint.setColor(Color.WHITE);(畫筆顏色)
mPaint.setARGB(int a, int r, int g, int b);取值都是0~255
mPaint.setAlpha (int a);設置畫筆透明度,取值0~255
mPaint.setDither(boolean dither):防抖動,這個屬性的需求場景主要出現在繪制漸變色彩或含漸變的圖片時,Android對不含alpha通道的圖片會進行一個轉化
mPaint.setStyle(畫筆樣式)
mPaint.setStyle(Paint.Style style):設置畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE
mPaint.setStrokeCap(設置畫筆帽)
mPaint.setStrokeCap(Paint.Cap cap):當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式,如圓形樣式;Cap.ROUND,或方形樣式Cap.SQUARE
mPaint.setStrokeWidth(float width):當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的粗細度
mPaint.setXfermode(Xfermode xfermode):設置圖形重疊時的處理方式,如合並,取交集或並集
mPaint.setShadowLayer(float radius ,float dx,float dy,int color):在圖形下面設置陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影 的顏色
2. Canvas基本用法
2.1 基本方法有
canvas.drawArc ();畫扇形
canvas.drawCircle();畫圓
canvas.drawOval();畫橢圓
canvas.drawLine();畫線
canvas.drawPoint();畫點
canvas.drawRect();畫矩形
canvas.drawRoundRect();畫圓角矩形
canvas.drawVertices();畫頂點
canvas.drawPath();畫路徑
canvas.drawBitmap();畫位圖
canvas.drawText() ;畫文字
2.2
2.2.1 畫扇形
private void drawArc(Canvas canvas) {
RectF rectF = new RectF(0, 0, 100, 100); paint.setColor(Color.parseColor("#33333333")); //oval :指定圓弧的外輪廓矩形區域。 //startAngle: 圓弧起始角度,單位為度。從180°為起始點 //sweepAngle: 圓弧掃過的角度,順時針方向,單位為度。 //useCenter: 如果為True時,在繪制圓弧時將圓心包括在內,通常用來繪制扇形。如果false會將圓弧的兩端用直線連接 //paint: 繪制圓弧的畫板屬性,如顏色,是否填充等 canvas.drawRect(rectF,paint); paint.setColor(Color.parseColor("#ff0000")); canvas.drawArc(rectF,0,90,
true,paint); }
運行效果如下:

2.2.2 畫圓
代碼如下
private void drawCircle(Canvas canvas) {
paint.setColor(Color.GREEN); //cx : 圓心在x軸上的坐標 //cy : 圓心的y軸上的坐標 //radius: 半徑 canvas.drawCircle(50,50,50,paint); }
效果如下:

2.2.3 畫橢圓
代碼如下:
private void drawOval(Canvas canvas) {
paint.setColor(Color.BLACK); RectF rectF = new RectF(0, 0, 150, 100); //oval : 外接矩形 canvas.drawOval(rectF,paint); }
效果如下:
2.2.4 畫線
代碼如下:
private void drawLine(Canvas canvas) {
canvas.drawLine(0,0,100,100,paint); canvas.translate(0,110); //畫一組線 float[] pts={0,0,100,0, 100,0,100,100, 100,100,0,100, 1,100,1,0}; //線寬 paint.setStrokeWidth((float) 2.0); //pts : 繪制直線的端點數組,每條直線占用4個數據。 //canvas.drawLines(pts, paint); //offset : 指定跳過的數據個數 //count : 指定取出數據的個數 canvas.drawLines(pts,4,
12,paint); }
效果如下:

2.2.5 畫點
代碼如下:
private void drawPoint(Canvas canvas) {
paint.setStrokeWidth((
float) 5.0); canvas.drawPoint(50,50,paint); canvas.translate(0,100); float[] pst = {20,20,40,40,60,60}; paint.setColor(Color.RED); canvas.drawPoints(pst,paint); canvas.translate(0,100); //跳過前兩個元素 canvas.drawPoints(pst,2,
4,paint);
}
效果如下:

2.2.6 畫矩形
代碼如下:
private void drawRect(Canvas canvas) { canvas.drawRect(0,0,100,100,paint); canvas.translate(0,110); canvas.drawRect(new RectF(0,0,100,100),paint); canvas.translate(0,110); canvas.drawRect(new Rect(0,0,100,100),paint); }
效果如下:

2.2.7 畫圓角矩形
代碼如下:
private void drawRoundRect(Canvas canvas) {
paint.setColor(Color.BLUE); //rect : 要繪制的矩形 //rx : x軸方向的弧度 //ry : y軸方向上的弧度 canvas.drawRoundRect(new RectF(0,0,100,100),10,10,paint); }
效果如下:

2.2.8 畫路徑
代碼如下:
private void drawPath(Canvas canvas) {
Path path = new Path(); //Path對象 path.moveTo(10, 50); //起始點 path.lineTo(50, 50); //連線到下一點 path.lineTo(10, 150); //連線到下一點 path.lineTo(50, 100); //連線到下一點 path.lineTo(50, 100); //連線到下一點 paint.setColor(Color.RED);//紅色 canvas.drawPath(path, paint); //繪制任意多邊形 }
效果如下:

2.2.9 畫圖片
代碼如下:
private void drawBitmap(Canvas canvas) {
Bitmap bitmap=((BitmapDrawable)getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap(); //left : 位圖距左邊的偏移量 //top : 位圖距頂部的偏移量 Rect rect = new Rect(0, 0, 100, 100); RectF rectf = new RectF(0, 0, 50, 50); //src : 是對圖片進行裁截,若是空null則顯示整個圖片 //dst :是圖片在Canvas畫布中顯示的區域,大於src則把src的裁截區放大, 小於src則把src的裁截區縮小。 canvas.drawBitmap(bitmap,rect,rectf,paint); }
效果如下:

2.2.10 畫文字
代碼如下
private void drawText(Canvas canvas) {
paint.setTextSize(30); Paint.FontMetrics fm = paint.getFontMetrics(); //x : 繪制時x軸偏移量 //y :繪制時y軸偏移量 canvas.drawText("Android",0,(fm.bottom - fm.top) / 2,paint);//這里要計算文字繪制的起點,因為文字是按baseLine來繪制的。 }
效果如下:

最后我們看一個例子 實現下面這種效果:

首先我們定義一個view 實現onDraw()方法 代碼如下:

我們通過不斷改變mCurPercent之后調用postInvalidate()方法進行實時繪制,就能看到進度動畫了。其實Canvas功能還能很強大的,大家可以不斷的學習。
這篇文章不錯 推薦下 http://blog.csdn.net/wangrain1/article/details/73287908