工作中很多时候会用到自定义View,刚开始接触可能会感觉到头痛,但是很多时候在所难免,所以积累点相关知识很重要,下面就从基础开始做起
参考泡网上的栗子:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html 点击打开链接
1、创建一个类继承View,并在构造方法里创建画笔,准备做点事情
public class CanvasTest extends View {
private Paint mPaint;
public CanvasTest(Context context) {
super(context);
//创建画笔
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setStrokeWidth(5);
mPaint.setAntiAlias(true);
mPaint.setStrokeJoin(Paint.Join.ROUND);
}
2、重写onDraw()方法,直接调用canvas对象进行绘制
绘制圆形drawCircle
//绘制圆形
canvas.drawCircle(100,100,100,mPaint);
绘制弧形
//绘制弧形区域
RectF rect = new RectF(100, 100, 200, 200);
canvas.drawArc(rect, //弧形所使用的矩形区域
0, //开始的角度
90, //扫过的角度
true, //是否使用中心,使用中心的话会围绕一个圆心进行绘制,否则,不会
mPaint); //画笔
绘制线、颜色、路径文字
//绘制颜色
canvas.drawColor(Color.BLUE);
//划线
canvas.drawLine(150, 150, 500, 500, mPaint);
//绘制椭圆
canvas.drawOval(rect,mPaint);
//绘制文字
canvas.drawPosText("HelloWorld",new float[]{
100,150,
110,160,
120,170,
130,180,
140,190,
150,200,
160,210,
170,220,
180,210,
190,220},mPaint
);
绘制矩形、折线
//绘制圆角矩形
canvas.drawRoundRect(rect,
20,//x轴半径
20, //y轴半径
mPaint);
//绘制矩形
Rect mRect=new Rect(300,300,500,500);
canvas.drawRect(mRect,mPaint);
//绘制折线 path
Path mPath=new Path();
mPath.moveTo(500,500);
mPath.lineTo(600,600);
mPath.lineTo(600,200);
mPath.lineTo(500,300);
canvas.drawPath(mPath,mPaint);
绘制一个钟表图案
mPaint.setAntiAlias(true);//抗锯齿
mPaint.setStyle(Paint.Style.STROKE);
canvas.translate(canvas.getWidth()/2, 200); //将位置移动画布的坐标点:150,150
canvas.drawCircle(0, 0, 100, mPaint); //画圆
//使用path绘制路径文字
canvas.save();
canvas.translate(-75, -75);
Path path = new Path();
path.addArc(new RectF(0,0,150,150), 150, -150);
//文字画笔
Paint textPaint = new Paint(mPaint);
textPaint.setTextSize(14);
textPaint.setStrokeWidth(1);
canvas.drawTextOnPath("TISSION TIME ", path, 28, 0, textPaint);
canvas.restore();
Paint tmpPaint = new Paint(mPaint); //小刻度画笔对象
tmpPaint.setStrokeWidth(1);
float y=100;
int count = 60; //总刻度数
for(int i=0 ; i <count ; i++){
if(i%5 == 0){
//绘制大刻度
canvas.drawLine(0f, y, 0, y+12f, mPaint);
//绘制文字
canvas.drawText(String.valueOf(i/5), -4f, -y-20f, tmpPaint);
}else{
//绘制小刻度
canvas.drawLine(0f, y, 0f, y +5f, tmpPaint);
}
canvas.rotate(360/count,0f,0f); //旋转画布
}
//绘制指针
tmpPaint.setColor(Color.GRAY);
tmpPaint.setStrokeWidth(4);
canvas.drawCircle(0, 0, 7, tmpPaint);
tmpPaint.setStyle(Paint.Style.FILL);
tmpPaint.setColor(Color.YELLOW);
canvas.drawCircle(0, 0, 5, tmpPaint);
canvas.drawLine(0, 10, 0, -65, mPaint);
}