绘画是自定义 View 的基础, Paint 和 canvas 相当于绘画中的画笔和纸, 掌握 Paint 和 canvas 可以使我们更加容易进行自定义 View.
Paint:
一, setAntiAlias()
一般用于绘制不规则图形的时候, 使用抗锯齿, 比如圆形, 文字等. 对于规则的图形, 是不需要打开抗锯齿功能的, 比如矩形.
二, setStyle()
设置填充的样式, 主要用于控制几何图形
Paint.Style.FILL 填充内部
Paint.Style.FILL_AND_STROKE 填充内部和描边
Paint.Style.STROKE 仅描边
三, setStrokeWidth()
设置画笔的宽度, 单位是 px. 对画笔的 STYLE 设置成 STROKE 和 FILL_AND_STROKE 时有效. 但画支线时无论 style 设置什么值, 均有效.
注意事项:
当设置较大 stroke 画圆, 并且绘画的范围占满 (基本占满) 画布或 rect 时, stroke 会超出绘画范围. 此时需要将原来的圆半径减去 stroke 一半得到的长度作为新圆的半径. stroke 超出的长度其实为 stroke 宽度的一半.
对于椭圆也差不多:
四, Paint.Cap
Cap 指定了描边线和路径的开始和结束的处理. 默认为 BUTT.
Paint.Cap.BUTT 无线帽
Paint.Cap.ROUND 圆形线帽
Paint.Cap.SQUARE 方形线帽
五, Paint.Join
Join 指定线条和曲线段在描边路径上连接的处理. 默认为 MITER.
Paint.Join.BEVEL 连接的外边缘以直线相交
Paint.Join.MITER 连接的外边缘以锐角相交
Paint.Join.ROUND 连接的外边缘以圆弧相交
当画笔 style 设置为 STROKE 或者 FILL_AND_STROKE 时, 绘画图形或绘画路径, 会根据画笔的 Join 值对线与线之间的结合处进行处理.
Canvas:
一, 画背景
canvas 提供 3 种方法可以用于绘制画布的背景
- void drawColor(int color)
- void drawARGB(int a,int r,int g,int b)
- void drawRGB(int r,int g,int b)
二, 画直线
startX: 起始点 X 坐标
startY: 起始点 Y 坐标
stopX: 终点 X 坐标
stopY: 终点 Y 坐标
void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
三, 画矩形
矩形的范围可以使用两个矩形工具类进行设置: Rect 和 RectF, 两者的主要区别就是 Rect 存储的上下左右均为 Int 类型, 而 RectF 存储的上下左右均为 Float 类型.
画圆角矩形:
rect 矩形的范围
rx 生成圆角的 x 轴半径
ry 生成圆角的 y 轴半径
但 drawRoundRect()方法只能生成四个圆角都是一致的矩形:
- void moveTo(float x1,float y1)
- void lineTo(float x2,float y2)
- void close()
来源: https://juejin.im/post/5bfc0446f265da6142739530