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的相关记录:学习文章
- 当布局中指定为精确尺寸,控件的宽高指定大小或者为match_parent,代码中对应的为MeasureSpec.UNSPECIFIED
- 当布局中指定为最大尺寸,控件的宽高为wrap_content,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸,代码中对应的为MeasureSpec.AT_MOST
- 当布局中未指定尺寸时,代码中对应的为MeasureSpec.UNSPECIFIED