自定义View学习记录

Paint基本使用:

        paint.setColor(Color.BLUE); // 设置画笔颜色
        paint.setAntiAlias(true); // 是否打开抗锯齿
        paint.setStrokeWidth(5); // 设置画笔宽度
        paint.setTextSize(50); // 设置绘制字体大小
        paint.setStyle(Paint.Style.STROKE); // 只绘制边
        paint.setStyle(Paint.Style.FILL); // 只绘制内容
        paint.setStyle(Paint.Style.FILL_AND_STROKE); // 绘制内容和边
        //设置拐角形状(Kotlin)
        paint.strokeJoin = Paint.Join.ROUND //圆角
        paint.strokeJoin = Paint.Join.BEVEL //平角
        paint.strokeJoin = Paint.Join.MITER //尖角
        //设置线头形状(Kotlin)
        paint.strokeCap = Paint.Cap.BUTT   //平头
        paint.strokeCap = Paint.Cap.ROUND  //圆头
        paint.strokeCap = Paint.Cap.SQUARE //方头

Canvas基本使用:

填充颜色:

 canvas.drawColor(Color.RED);
 canvas.drawRGB(255,0,0);
 canvas.drawARGB(100,255,0,0);

画圆:

 /*
     圆:  一参:圆心x坐标; 二参:圆心y坐标;三参:圆的半径。
*/
canvas.drawCircle(200,200,100,paint);

画四边形:

/*
         四边形:
         第一种:
         一参:左上角x坐标; 二参:左上角y坐标;
         三参:右下角x坐标; 四参:右下角y坐标。
         第二种:
         一参:Rect类。(它是int类型)
         第三种:
         一参:RectF类。(它是float类型)
         */
        canvas.drawRect(50,600,250,800,paint);
        canvas.drawRect(new Rect(50,600,250,800),paint);
        canvas.drawRect(new RectF(50F,600F,250F,800F),paint);

画点:

/*
          画点:
          第一种:(画单个点)
          一参:点的x坐标; 二参:点的y坐标。
          第二种:(画多个点)
          一参:float数组,两个一对表示一个点;
          二参:跳过几个数;(填2的话就跳过了{50,50}这一对,第一个点就不画了)
          三参:一共画几个点;(p数组中一共有6对12个,填12就可以全部画出来,选择跳过的除外)
         */
        paint.setStrokeCap(Paint.Cap.BUTT); //  Paint样式:平头点
        paint.setStrokeCap(Paint.Cap.ROUND); // Paint样式:圆头点
        paint.setStrokeCap(Paint.Cap.SQUARE); // Paint样式:方头点
        canvas.drawPoint(300, 300, paint);
        float[] p ={50,50, 100,100, 150,150, 200,200, 250,250, 300,300};
        canvas.drawPoints(p,2,12,paint);

画椭圆:

/*
          画椭圆:(与四边形一样)
         */
        canvas.drawOval(new RectF(100,200,400,400),paint);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawOval(100,200,400,400,paint); // 此方法需要api大于21
        }

画线:

/*
          画线:
          第一种:
          一参:起点x坐标; 二参:起点y坐标;
          三参:终点x坐标; 四参:终点y坐标。
          第二种:
          一参:float数组,四个为一对(这四个数值代表的含义和第一个一样)
         */
        canvas.drawLine(200,200,400,400,paint);
        float[] l = {50, 50, 150, 50,
                100, 50, 100, 180,
                65, 100, 135, 100,
                40, 180, 160, 180};
        canvas.drawLines(l, paint);

画圆角矩形:

 /*
          画圆角矩形:
          第一种:
          一参:RectF对象,与四边形一样;二参:横向半径;三参:纵向半径;
          第二种:
          一参到四参:四边形一样;五参:横向半径;六参:纵向半径;
         */
        canvas.drawRoundRect(new RectF(200, 200, 400, 400), 5, 100, paint);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawRoundRect(200,200,400,400,50,50,paint);// 此方法需要api大于21
        }

画扇形与弧形:(扇形的圆心是矩形对角线的中心)

/*
          绘制弧形、扇形:
          第一种:
          一参:RectF类,和四边形一样;
          二参:弧形或扇形开始的位置;(圆周360度的任意一个位置)
          三参:弧形或扇形扫过的角度;(圆周360度的任意一个位置)
          四参数:是否连接到圆心;true:画的是扇形,false:画的是弧形;
          第二种:
          一到四参:与四变形一样;
          剩余参数:与第一种的二三四参相对应
         */
        canvas.drawArc(new RectF(200,200,400,400),0,125,true,paint);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawArc(200,200,400,400,0,125,true,paint);// 此方法需要api大于21
        }

画自定义图形:

 /*
         画自定义图形:
         */
        path.moveTo(50,50); // 初始位置(0,0),通过moveTo(50,50)把初始点移动到x=50,y=50的位置
        path.lineTo(500,500); // 画一个线:起点(初始点,上边移动到了x=50,y=50),终点:lineTo(500,500)
        path.rLineTo(500,0); // 画一个线:起点(上一条线的终点x=500,y=500),终点:rLineTo(500,0)
        canvas.drawPath(path,paint); // 画出Path

onMeasure的相关记录:学习文章

  1. 当布局中指定为精确尺寸,控件的宽高指定大小或者为match_parent,代码中对应的为MeasureSpec.UNSPECIFIED
  2. 当布局中指定为最大尺寸,控件的宽高为wrap_content,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸,代码中对应的为MeasureSpec.AT_MOST
  3. 当布局中未指定尺寸时,代码中对应的为MeasureSpec.UNSPECIFIED
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值