天天看點

Android學習之——Canvas畫圖

記一次重新溫故Android畫圖,學過的知識很容易忘記,特在此記錄!

前期準備

首先,需要建立一個類,繼承View或其他控件(依需求而定),然後實作兩個構造方法(一定要兩個),然後重寫onDraw()方法

public class Canvas extends View {


    private Paint mPaint = new Paint();

    public Canvas(Context context) {
        super(context);
    }

    public Canvas(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @SuppressLint("NewApi")
    @Override
    protected void onDraw(android.graphics.Canvas canvas) {
        super.onDraw(canvas);
    }
}
           

然後直接在需要的布局中使用這個控件就行了!

Paint相當于畫布 , canvas相當于畫筆,接下來就可以畫東西了,先上一點基本屬性

Paint常用的設定函數:

setAlpha()透明度

setAntiAlias()抗鋸齒

setColor(),setARGB()設定顔色

setStyle(Paint.Style style) 設定填充樣式

setStrokeCap(Paint.Cap cap) 畫筆的樣式(落筆,收筆時)

setStrokeJoin(Paint.Join join)連接配接點的樣式

setStrokeWidth(float width)設定畫筆寬度

setShadowLayer(float radius, float dx, float dy, int shadowColor) 設定陰影

setTextSize(float textSize) 字型大小

setTextAlign(Paint.Align.RIGHT)設定字型對齊方式

setColorFilter(ColorFilter filter) 設定顔色過濾

setUnderlineText(true) 下劃線

setPathEffect() 設定路徑效果

setTypeface() 設定字型風格

setFilterBitmap() 設定圖檔過濾

setXfermode(Xfermode xfermode) xfermode設定圖像混合模式

setShader(Shader shader) 設定shader包括漸變shader,圖檔shader

1.設定字型

canvas.drawText("android Paint 學習 CENTER", 300, 400, mPaint);

canvas.drawText(顯示的文字 , 左邊距 , 上邊距 , 畫布);

Android學習之——Canvas畫圖

2.設定陰影

mPaint.setShadowLayer(10 ,-50 , 50 , Color.BLUE);

mPaint.setShadowLayer(陰影模糊度(數值越大越清晰)  ,  右邊距 , 上邊距 , 文本顔色)

Android學習之——Canvas畫圖
3.畫正方形

(1)寫法1:Rect rect = new Rect(100 ,100 ,300 ,500);

canvas.drawRect(rect , mPaint);

(2)寫法2:canvas.drawRect(100,700,300,900,mPaint);

canvas.drawRect(左邊距 ,上邊距, 長 , 寬 , 畫布)

Android學習之——Canvas畫圖

4.畫圓角矩形

canvas.drawRoundRect(100, 400, 300, 600 ,50 ,50 ,mPaint);

canvas.drawRoundRect(100, 400, 300, 600 ,50 ,50 ,mPaint);

canvas.drawRoundRect(左邊距 , 上邊距 , 右邊距 , 下邊距 , 長 , 寬 ,畫布)

Android學習之——Canvas畫圖

5.畫圓形

canvas.drawCircle(400,400,200,mPaint);

canvas.drawCircle(圓心左邊距 , 圓形上邊距 , 半徑 ,畫布);

Android學習之——Canvas畫圖

6.畫路徑

Path path = new Path();
        path.moveTo(200 ,200); //起點
        path.lineTo(300 ,300); //途點
        path.lineTo(200 ,600); //終點
        canvas.drawPath(path , mPaint);
           

7.畫連續直線

mPaint.setStrokeWidth(15);
float[] positions2 = {20,20,20,35,320,320,320,335,340,340,350,387,360,370,390,420,410,200,90,170};
//        float[] positions2 = {第一個點起點x軸,第一個點起點y軸,第一個點終點x軸,第二個點終點y軸... }
canvas.drawLines(positions2,4,12,mPaint);
           

繪制線的集合,參數中pts是點的集合,兩個值代表一個點,四個值代表一條線,互相之間不連接配接。

offset跳過的點,count跳過之後要繪制的點的總數,可以用于集合中部分點的繪制

Android學習之——Canvas畫圖

7.畫圓弧

RectF rectF1 = new RectF(100 ,100 ,400 ,400);
 canvas.drawArc(rectF1 , 0 , 270 ,false , mPaint);
//        RectF rectF1 = new RectF(左邊距 ,上邊距 ,圓心x軸 ,圓心y軸);
//        canvas.drawArc(圓 , 起始圓弧度 , 終點圓弧度  , 是否直線連接配接 , 畫布);
           

以下是第四個參數true和false的差別

Android學習之——Canvas畫圖
Android學習之——Canvas畫圖

8.畫橢圓

//        RectF rectF2 = new RectF(起始點x軸, 起始點y軸, 終點x軸, 終點y軸);
//        起始點相當于矩形的左上角,終點相當于矩形右下角,在矩形中畫圓
RectF rectF1 = new RectF(200, 200, 400, 400);
RectF rectF2 = new RectF(200, 500, 700, 600);
canvas.drawOval(rectF1,mPaint);
canvas.drawOval(rectF2,mPaint);
           
Android學習之——Canvas畫圖

9.繪制點

float[] points = {30,40,40,50,60,60};
canvas.drawPoints(points,mPaint);
           
Android學習之——Canvas畫圖

10.畫環形文字

//        path.addArc(new RectF(起始點X軸,起始點y軸,終點X軸,終點Y軸),起始度,終止度);
//        canvas.drawTextOnPath(文字,路徑,水準偏移量,垂直偏移量,畫布);
        Path path = new Path();
        path.addArc(new RectF(100,100,800,800),0,360);
        canvas.drawTextOnPath("好好學習,天天向上,好好學習,天天向上,好好學習,天天向上",path,100,100,mPaint);
           
Android學習之——Canvas畫圖