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);
源碼下載下傳位址:https://github.com/baojie0327/ViewAndGroup