這篇文章主要介紹下畫筆Paint和畫布Canvas的基本使用java
1.Paintcanvas
建立對象Paint mPaint = new Paint();數組
經常使用的基本方法有 :post
mPaint.setAntiAlias(true); (抗鋸齒)學習
mPaint.setColor(Color.WHITE);(畫筆顏色)動畫
mPaint.setARGB(int a, int r, int g, int b);取值都是0~255 spa
mPaint.setAlpha (int a);設置畫筆透明度,取值0~255.net
mPaint.setDither(boolean dither):防抖動,這個屬性的需求場景主要出如今繪製漸變色彩或含漸變的圖片時,Android對不含alpha通道的圖片會進行一個轉化3d
mPaint.setStyle(畫筆樣式)code
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