自定义View绘画

自定义的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所以就截两张图敷衍一下在座的各位

在这里插入图片描述
在这里插入图片描述
就这样吧
*

INTERESTING!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值