天天看點

Android自定義控件(二)View的繪制

android的圖形的繪制,主要用到Canvas。

google官網上已經給出了Canvas的用法,https://developer.android.google.cn/guide/topics/graphics/2d-graphics.html

- Canvas類具有畫圖的能力,如果你想畫圖,要具備四個部件。

1.Bitmap控制像素

2.Canvas控制繪圖請求

3.一些繪圖的方法, Rect, Path, text, Bitmap等

4.一個畫筆,可以自定義colors和styles

構造方法 備注
Canvas() 空的構造方法
Canvas(Bitmap bitmap) 帶bitmap的構造方法

- Canvas的常用操作

操作類型 相關API 備注
繪制顔色 drawColor, drawRGB, drawARGB 使用單一顔色填充整個畫布
繪制基本形狀 drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc 依次為 點、線、矩形、圓角矩形、橢圓、圓、圓弧
繪制圖檔 drawBitmap, drawPicture 繪制位圖和圖檔
繪制文本 drawText, drawPosText, drawTextOnPath 依次為 繪制文字、繪制文字時指定每個文字位置、根據路徑繪制文字
繪制路徑 drawPath 繪制路徑,繪制貝塞爾曲線時也需要用到該函數
頂點操作 drawVertices, drawBitmapMesh 通過對頂點操作可以使圖像形變,drawVertices直接對畫布作用、 drawBitmapMesh隻對繪制的Bitmap作用
畫布剪裁 clipPath, clipRect 設定畫布的顯示區域
畫布快照 save, restore, saveLayerXxx, restoreToCount, getSaveCount 依次為 儲存目前狀态、 復原到上一次儲存的狀态、 儲存圖層狀态、 復原到指定狀态、 擷取儲存次數
畫布變換 translate, scale, rotate, skew 依次為 位移、縮放、 旋轉、錯切
Matrix(矩陣) getMatrix, setMatrix, concat 實際畫布的位移,縮放等操作的都是圖像矩陣Matrix,隻不過Matrix比較難以了解和使用,故封裝了一些常用的方法。

- Paint 代表了Canvas上的畫筆、畫刷、顔料等等;

Paint類常用方法:

操作類型 相關API 備注
設定argb setARGB(int a, int r, int g, int b)
設定透明度 setAlpha(int a)
設定抗鋸齒 setAntiAlias(boolean aa)
設定顔色 setColor(int color)
設定畫筆寬度 setStrokeWidth(float width)
設定樣式 setStyle(Paint.Style style) Paint.Style.FILL填充内部Paint.Style.FILL_AND_STROKE 填充内部和描邊 Paint.Style.STROKE 描邊
設定文本縮放倍數 setTextScaleX(float scaleX)
設定字型大小 setTextSize(float textSize)
設定下劃線 setUnderlineText(boolean underlineText)

1.畫筆初始化

mPaint2 = new Paint();
mPaint2.setColor(Color.RED);
mPaint2.setStyle(Paint.Style.FILL);
mPaint2.setAntiAlias(true);
           

1.畫點

mPaint2.setStrokeWidth();
canvas.drawPoint(, , mPaint2);
canvas.drawPoints(new float[]{, , , , , },mPaint2);
           

2.畫直線,繪制直線需要兩個點,初始點和結束點,同樣繪制直線也可以繪制一條或者繪制一組:

canvas.drawLine(,,,,mPaint2);
canvas.drawLines(new float[]{,,,,,,,},mPaint2);
           

3.繪制矩形,确定一個矩形最少需要四個資料,就是對角線的兩個點的坐标值

canvas.drawRect(,,,,mPaint2);  //第一種,兩點确定一個矩形
Rect rect=new Rect(,,,);   //将矩形封裝為rect ,Rect是int(整形)的
canvas.drawRect(rect,mPaint2);
RectF rectF=new RectF(,,,);  //RectF是float(單精度浮點型)的
canvas.drawRect(rectF,mPaint2);
           

4.繪制圓角矩形

RectF rectF1=new RectF(,,,);
canvas.drawRoundRect(rectF1,,,mPaint2);
canvas.drawRoundRect(,,,,mPaint2);   //API>=21
           

5.繪制橢圓

RectF rectF2=new RectF(,,,);
canvas.drawOval(rectF2,mPaint2);
canvas.drawOval(,,,,mPaint2);  //API>=21
           

6.繪制圓,繪制圓形有四個參數,前兩個是圓心坐标,第三個是半徑,最後一個是畫筆

7.繪制圓弧

- 第一種

public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint){}

  • 第二種

    public void drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, @NonNull Paint paint) {}

startAngle - 開始角度

sweepAngle - 掃過角度

useCenter - 是否使用中心

RectF rectF3=new RectF(,,,);
canvas.drawRect(rectF3,mPaint1);
canvas.drawArc(rectF3,,,false,mPaint2);
RectF rectF4=new RectF(,,,);
canvas.drawRect(rectF4,mPaint1);
canvas.drawArc(rectF4,,,true,mPaint2);
           
Android自定義控件(二)View的繪制

源碼下載下傳位址:https://github.com/baojie0327/ViewAndGroup