自定义的view有四个构造方法
1,
自定义view的第一步是写构造方法,构造方法是用来初始化对象的,包括view也是对象。
2,
构造方法在这里一般要写三个甚至四个,这样写的原因:我们在不同的情况下创建View的方式不同,可能需要从xml文件中填充布局,也可能不需要,或者也需要一样style之类的,因此不同情况下,使用的构造可能存在差异。
因此构造方法也有这么多种类。从API上描述我们一定要有第二个构造方法。(在实际开发中也可以第一个调用第二个,第二个调用第三个构造,确保使用了每一种)
3,
第一个构造:是在java创建视图的时候调用,如果从xml文件中填充,则不会调用这个构造方法;
第二个构造方法 :用于layout文件实例化,会把xml中的参数通过attrs带入;
第三个构造方法:这个构造方法是在第二个基础上再传入style的.
我们今天做的是在自定义的view上进行绘画,用画笔做
我们来简单的看一下
首先需要定义画笔类,准备四根
private Paint paintR;
private Paint paintB;
private Paint paintY;
private Paint paintG;
然后进行赋值
initPaint();
}
//初始化画笔
private void initPaint() {
paintR = new Paint();
paintR.setAntiAlias(true);
paintR.setColor(Color.RED);
paintR.setStyle(Paint.Style.FILL);
paintR.setStrokeWidth(10);
paintB = new Paint();
paintB.setAntiAlias(true);
paintB.setColor(Color.BLUE);
paintB.setStyle(Paint.Style.FILL);
paintB.setStrokeWidth(10);
paintY = new Paint();
paintY.setAntiAlias(true);
paintY.setColor(Color.YELLOW);
paintY.setStyle(Paint.Style.FILL);
paintY.setStrokeWidth(10);
paintG = new Paint();
paintG.setAntiAlias(true);
paintG.setColor(Color.GRAY);
paintG.setStyle(Paint.Style.FILL);
paintG.setStrokeWidth(10);
}
重写onDraw方法,在里面写关于图形的属性大小形状等等,下面写的是扇形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rectF1 = new RectF(width/2-50,height/2-125,width/2+50,height/2-75);
canvas.drawOval(rectF1,paintGRAY);
canvas.drawLine(width/2,height/2,width/2,height/2-100,paintGRAY);
RectF rectF = new RectF(-(width/4),-(width/4),(width/4),(width/4));
canvas.translate(width/2,height/2);
canvas.drawArc(rectF,startAngleR,30,true,paintRED);
canvas.drawArc(rectF,startAngleB,30,true,paintBlue);
canvas.drawArc(rectF,startAngleY,30,true,paintYELLOW);
}
最后呢则是写一个可以实时更新的线程,让风扇转起来
@Override
public void run() {
while (true){
startAngleR +=100;
startAngleB = startAngleR+120;
startAngleY = startAngleB+120;
postInvalidate();
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.height = h;
this.width = w;
}
PS:鄙人实在是不会发gif所以就截两张图敷衍一下在座的各位
就这样吧
*