自定义控件-----(第一节)

这段时间比较充足,自入行以来,就一直有计划要补充一下自己在自定义控件方面的知识点,终于提到日程上了,后续会一直更新,先从基础开始对基本的绘制进行简单API的熟悉,下面不多说,直接上干货:奋斗奋斗奋斗

下面就是绘制的一些简单图形,先看一下效果图:(没有进行整理位置,注重的是如何绘制,简单实现,熟悉api即可)




接下来就是代码,想学习的要多练习,必须亲自上手敲,本人深有体验:(上面有些简单注释)

private Paint paint;
private Paint paint2;
private Paint paint3;
float[] points = {0, 0, 30, 200, 50, 240, 100, 250, 140, 200, 150, 250, 150, 100};
float[] points2 = {0, 0, 30, 200, 50, 240, 50, 240, 100, 250, 100, 250, 140, 200};
private Paint paint4;

public Rect_1_1_Demo(Context context) {
    this(context, null);
}

public Rect_1_1_Demo(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
}

public Rect_1_1_Demo(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initView();
}

private void initView() {
    paint = new Paint();
    paint.setColor(Color.RED);
    paint.setStrokeWidth(5);//设置线条宽度
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStyle(Paint.Style.STROKE);

    paint2 = new Paint();
    paint2.setColor(Color.BLACK);
    paint2.setStrokeWidth(20);
    paint2.setStrokeCap(Paint.Cap.SQUARE);
    paint2.setStyle(Paint.Style.FILL);

    paint3 = new Paint();
    paint3.setColor(Color.RED);
    paint3.setStyle(Paint.Style.FILL_AND_STROKE);

    paint4 = new Paint();
    paint4.setColor(Color.BLUE);
    paint4.setTextSize(36);
    paint4.setStrokeWidth(2);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawRect(30, 30, 130, 130, paint);
    canvas.drawRect(190, 30, 290, 130, paint2);
    canvas.drawRect(350, 30, 450, 130, paint3);

    canvas.drawPoint(510, 60, paint);
    canvas.drawPoint(570, 60, paint2);

    canvas.drawPoints(points, 2, 10, paint2);

    canvas.drawOval(570, 200, 770, 350, paint);

    canvas.drawLine(30, 300, 400, 280, paint);

    canvas.drawLines(points2, 2, 12, paint);

    canvas.drawRoundRect(30, 400, 300, 500, 20, 20, paint2);
    canvas.drawRoundRect(400, 400, 670, 500, 20, 20, paint);

    /**
     * 对参数进行解释:
     * float left,
     * float top,
     * float right,
     * float bottom,
     * float startAngle, 0-180度。0度代表数学的X轴正方向,正数代表扇形在下方,负数代表扇形在上方
     * float sweepAngle,    正数代表扇形在下方,负数代表扇形在上方
     * boolean useCenter    true表示画一个扇形,表示连接圆心,false表示画一条弧线,不连接圆心
     */
    canvas.drawArc(200, 600, 400, 800, 0, -90, true, paint);
    canvas.drawArc(100, 600, 200, 700, 0, -90, false, paint);

    //下面就是通过path来进行绘制
    Path path = new Path();
    //画圆
    path.addCircle(600, 650, 50, Path.Direction.CW);
    path.addCircle(675, 650, 50, Path.Direction.CW);
    path.addCircle(750, 650, 50, Path.Direction.CW);
    path.addCircle(825, 650, 50, Path.Direction.CW);
    canvas.drawPath(path, paint);

    Path path1 = new Path();
    path1.moveTo(100, 800);
    path1.lineTo(200, 900); // 由当前位置 (100, 800) 向 (300, 900) 画一条直线
    path1.rLineTo(100, 0);  //继续上次结束的点为远点进行画线
    canvas.drawPath(path1, paint);

    //true 表示绘制下一个弧线的时候不会和上次绘制的直线进行相连,false则相反
    Path path2 = new Path();
    path2.moveTo(500, 800);
    path2.lineTo(600, 900);
    path2.arcTo(600, 800, 700, 900, 40, -120, true);
    canvas.drawPath(path2, paint);

    //close方法的使用,
    Path path3 = new Path();
    path3.moveTo(50, 1000);
    path3.lineTo(180, 1000);
    path3.rLineTo(100, 100);
    path3.close();
    canvas.drawPath(path3, paint);

    //绘制图片
    Bitmap girlBitmap = ((BitmapDrawable) getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap();
    canvas.drawBitmap(girlBitmap, 300, 900, paint);

    //绘制文字
    canvas.drawText("canvas",500,1000,paint4);
}

希望对大家有用,感谢感谢,勿喷勿喷!不想看清绕道!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值