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(10);
canvas.drawPoint(100, 100, mPaint2);
canvas.drawPoints(new float[]{100, 120, 120, 120, 140, 120},mPaint2);

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

canvas.drawLine(100,150,200,150,mPaint2);
canvas.drawLines(new float[]{100,170,220,170,100,190,300,190},mPaint2);

3.繪製矩形,確定一個矩形最少需要四個數據,就是對角線的兩個點的座標值

canvas.drawRect(100,210,300,300,mPaint2);  //第一種,兩點確定一個矩形
Rect rect=new Rect(400,210,600,300);   //將矩形封裝爲rect ,Rect是int(整形)的
canvas.drawRect(rect,mPaint2);
RectF rectF=new RectF(700,210,900,300);  //RectF是float(單精度浮點型)的
canvas.drawRect(rectF,mPaint2);

4.繪製圓角矩形

RectF rectF1=new RectF(100,350,500,400);
canvas.drawRoundRect(rectF1,30,30,mPaint2);
canvas.drawRoundRect(60,350,800,400,mPaint2);   //API>=21

5.繪製橢圓

RectF rectF2=new RectF(100,450,500,550);
canvas.drawOval(rectF2,mPaint2);
canvas.drawOval(600,500,800,600,mPaint2);  //API>=21

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

canvas.drawCircle(700,700,100,mPaint2);

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(100,850,300,900);
canvas.drawRect(rectF3,mPaint1);
canvas.drawArc(rectF3,0,90,false,mPaint2);
RectF rectF4=new RectF(400,850,600,900);
canvas.drawRect(rectF4,mPaint1);
canvas.drawArc(rectF4,0,90,true,mPaint2);

微信圖片_20170323095301.png
源碼下載地址:https://github.com/baojie0327/ViewAndGroup

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章