自定義view里面的onDraw方法,在這里我們可以繪制各種圖形,onDraw里面有兩個API我們需要了解清楚他們的用法:Canvas 和 Paint.
Canvas翻譯成中文就是畫布的意思,Canvas負責進行繪制各種各樣的圖形,它有如下的一些繪制圖形方法:
-
drawArc 繪制弧
-
drawBitmap 繪制位圖
-
drawCircle 繪制圓形
-
drawLine 繪制線
-
drawOval 繪制橢圓
-
drawPath 繪制路徑
-
drawPoint 繪制一個點
-
drawPoints 繪制多個點
-
drawRect 繪制矩形
-
drawRoundRect 繪制圓角矩形
-
drawText 繪制字符串
-
drawTextOnPath 沿着路徑繪制字符串
更多的繪制方法參考:https://developer.android.com/reference/android/graphics/Canvas.html.
Paint翻譯成中文有油漆塗料的意思,Paint主要負責設置繪圖的風格,包括畫筆的顏色,粗細,填充風格等,它有如下的一些設置方法:
-
setARGB/setColor 設置顏色
-
setAlpha 設置透明度
-
setAntiAlias 設置是否抗鋸齒
-
setShader 設置畫筆的填充效果
-
setShadowLayer 設置陰影
-
setStyle 設置畫筆風格
-
setStrokeWidth 設置空心邊框的寬度
-
setTextSize 設置繪制文本時文字的大小
- setStrokeCap(Paint.Cap.ROUND) 設置為圓角
更多的設置方法參考:https://developer.android.com/reference/android/graphics/Paint.html
繪制圓形:drawCircle(float cx, float cy, float radius, Paint paint)
cx: 圓心的x坐標
cy: 圓心的y坐標
radius: 圓的半徑
paint: 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
//繪制普通圓 canvas.drawCircle(200,200,100,paint);
//設置空心Style paint.setStyle(Paint.Style.STROKE);
//設置空心邊框的寬度 paint.setStrokeWidth(20);
//繪制空心圓 canvas.drawCircle(200,500,90,paint); }
繪制矩形:drawRect(float left, float top, float right, float bottom, Paint paint) / drawRect(RectF rect, Paint paint)
left: 矩形left的x坐標
top: 矩形top的y坐標
right: 矩形right的x坐標
bottom: 矩形bottom的y坐標
paint: 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
//繪制正方形 canvas.drawRect(100, 100, 300, 300, paint);
//上面代碼等同於 //RectF rel=new RectF(100,100,300,300); //canvas.drawRect(rel, paint); //設置空心Style paint.setStyle(Paint.Style.STROKE);
//設置空心邊框的寬度 paint.setStrokeWidth(20);
//繪制空心矩形 canvas.drawRect(100, 400, 600, 800, paint); }
繪制圓角矩形:drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint) / drawRoundRect(RectF rect, float rx, float ry, Paint paint)
left: 圖形left的x坐標
top: 圖形top的y坐標
right: 圖形right的x坐標
bottom: 圖形bottom的y坐標
rx: x方向的圓角半徑
ry: y方向的圓角半徑
paint > 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_blue_light));
//繪制圓角矩形 canvas.drawRoundRect(100, 100, 300, 300, 30, 30, paint);
//上面代碼等同於 //RectF rel=new RectF(100,100,300,300); //canvas.drawRoundRect(rel,30,30,paint);
//設置空心Style paint.setStyle(Paint.Style.STROKE);
//設置空心邊框的寬度 paint.setStrokeWidth(20);
//繪制空心圓角矩形 canvas.drawRoundRect(100, 400, 600, 800, 30, 30, paint); }
繪制橢圓:drawOval(float left, float top, float right, float bottom, Paint paint)
left: 圖形left的x坐標
top: 圖形top的y坐標
right: 圖形right的x坐標
bottom: 圖形bottom的y坐標
paint: 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_orange_dark));
//繪制橢圓 canvas.drawOval(100, 100, 500, 300, paint);
//設置空心Style paint.setStyle(Paint.Style.STROKE);
//設置空心邊框的寬度 paint.setStrokeWidth(20);
//繪制空心橢圓 canvas.drawOval(100, 400, 600, 800, paint); }
繪制弧:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval: 指定圓弧的外輪廓矩形區域
startAngle: 圓弧起始角度,單位為度
sweepAngle: 圓弧掃過的角度,順時針方向,單位為度
useCenter: 如果為True時,在繪制圓弧時將圓心包括在內,通常用來繪制扇形
paint: 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_orange_dark));
RectF rel = new RectF(100, 100, 300, 300);
// 設置為圓角
paint .setStrokeCap(Paint.Cap.ROUND);
//實心圓弧 canvas.drawArc(rel, 0, 270, false, paint);
//實心圓弧 將圓心包含在內 RectF rel2 = new RectF(100, 400, 300, 600); canvas.drawArc(rel2, 0, 270, true, paint);
//設置空心Style paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(20);
RectF rel3 = new RectF(100, 700, 300, 900); canvas.drawArc(rel3, 0, 270, false, paint);
RectF rel4 = new RectF(100, 1000, 300, 1200); canvas.drawArc(rel4, 0, 270, true, paint); }
繪制文字:drawText(String text, float x, float y, Paint paint)
text: 文本
x: 文本origin的x坐標
y: 文本baseline的y坐標
paint: 繪制風格
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
//去鋸齒 paint.setAntiAlias(true);
//設置顏色 paint.setColor(getResources().getColor(android.R.color.holo_orange_dark)); paint.setTextSize(100);
//繪制文本 canvas.drawText("jEh", 80, 150, paint); }
