天天看點

自定義VIEW(學習筆記三)-基本圖形的繪制

一.Canvas簡介

Canvas我們可以稱之為畫布,能夠在上面繪制各種東西,是安卓平台2D圖形繪制的基礎,非常強大。

一般來說,比較基礎的東西有兩大特點:

  1. 可操作性強:由于這些是構成上層的基礎,是以可操作性必然十分強大。
  2. 比較難用:各種方法太過基礎,想要完美的将這些操作組合起來有一定難度。

不過不必擔心,本系列文章不僅會介紹到Canvas的操作方法,還會簡單介紹一些設計思路和技巧。

二.Canvas的常用操作速查表

自定義VIEW(學習筆記三)-基本圖形的繪制

三.Canvas

3.1 繪制顔色

繪制顔色是填充整個畫布,常用于繪制底色。

3.2 建立畫筆

要想繪制内容,首先需要先建立一個畫筆:

// 1.建立一個畫筆
  private Paint mPaint = new Paint();
           
// 2.初始化畫筆
    private void initPaint() {
        mPaint.setColor(Color.BLACK);       //設定畫筆顔色
        mPaint.setStyle(Paint.Style.FILL);  //設定畫筆模式為填充
        mPaint.setStrokeWidth(f);         //設定畫筆寬度為10px
    }
           
// 3.在構造函數中初始化
    public SloopView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }
           

3.3繪制點:

可以繪制一個點,也可以繪制一組點,如下:

canvas.drawPoint(, , mPaint);     //在坐标(200,200)位置繪制一個點
        canvas.drawPoints(new float[]{          //繪制一組點,坐标位置由float數組指定
                ,,
                ,,
                ,
        },mPaint);
           

關于坐标原點預設在左上角,水準向右為x軸增大方向,豎直向下為y軸增大方向。

3.4 繪制直線:

canvas.drawLine(,,,,mPaint);    // 在坐标(300,300)(500,600)之間繪制一條直線
canvas.drawLines(new float[]{// 繪制一組線 每四數字(兩個點的坐标)确定一條線
    ,,,,
    ,,,
},mPaint);
           

3.5 繪制矩形:

确定确定一個矩形最少需要四個資料,就是對角線的兩個點的坐标值,這裡一般采用左上角和右下角的兩個點的坐标。

關于繪制矩形,Canvas提供了三種重載方法,第一種就是提供四個數值(矩形左上角和右下角兩個點的坐标)來确定一個矩形進行繪制。 其餘兩種是先将矩形封裝為Rect或RectF(實際上仍然是用兩個坐标點來确定的矩形),然後傳遞給Canvas繪制,如下:

// 第一種
canvas.drawRect(,,,,mPaint);

// 第二種
Rect rect = new Rect(,,,);
canvas.drawRect(rect,mPaint);

// 第三種
RectF rectF = new RectF(,,,);
canvas.drawRect(rectF,mPaint);
           

兩者最大的差別就是精度不同,Rect是int(整形)的,而RectF是float(單精度浮點型)的。

3.6 繪制圓角矩形:

繪制圓角矩形也提供了兩種重載方式,如下:

// 第一種
        RectF rectF = new RectF(,,,);
        canvas.drawRoundRect(rectF,,,mPaint);

        // 第二種
        canvas.drawRoundRect(,,,,,,mPaint);
           

上面兩種方法繪制效果也是一樣的,但鑒于第二種方法在API21的時候才添加上,是以我們一般使用的都是第一種。