我的自定义View学习笔记(一)—— 绘制
程序员文章站
2022-07-13 15:30:42
...
- 这个一个系列,本系列讲的都是本人自定义 View 的学习笔记。目的是加深影响,便于在以后工作中遇到相关问题的时候,能够有个印象知道到哪里去寻找答案。
- 这是我学习扔物线大神的自定义 View 教程,自己记录的笔记。链接在这里HenCoder,强烈推荐大家去原地址学习,毕竟我写的笔记只是针对我个人的口味而言的,用词和对概念的理解不一定有扔物线大神准确。
- 我再发一次地址:https://hencoder.com
自定义 View 的绘制工作,是在 onDraw() 方法中进行的
一、Canvas.drawXXX() 的使用
1. drawColor(int color)
- 在整个区域统一图上指定的颜色
- drawRGB()、drawARGB() 一样,都是用来填充颜色
- 多用于绘制前,设置底色 或者 绘制后,作为蒙版
2. drawCircle(float centerX, float centerY, float radius, Paint paint)
- 参数:圆心X坐标、圆心Y坐标、半径(单位都为像素)、定义圆的样式
View中的坐标,以左上角为原点(0,0)。向右为 X 轴正方向,向下为 Y 轴正方向
3. drawRect(float left, float top, float right, float bottom, Paint paint)
- 参数:x轴方向,最左边的位置;Y轴方向最上面的位置;X轴方向,最右边的位置;Y轴方向,最下面的方向。
4. drawPoint(float x, float y, Paint paint)
- 参数:x、y 点的坐标
- 可以通过 paint.setStrokeWith(width) 设置点的大小
- 和 drawCircle()、drawRect() 功能类似
5. drawOval(float left, float top, float right, float bottom, Paint paint)
- 参数:和绘制矩形时一样,上下左右边界的点
6. drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
- 参数:起点坐标、终点坐标
7. drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
- 绘制圆角矩形
- 参数:left、top、right、bottom 为矩形,rx、ry是圆角的横向半径和纵向半径
8. drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
- 绘制弧形或扇形
- 参数:left、top、right、bottom 表示弧形所在的椭圆;startAngle 表示起始的角度(X轴正向,是0度的位置;顺时针为正,逆时针为负);sweepAngle为划过的角度; userCenter 表示是否连接到圆心,如果不连接为弧,连接为扇形
9. drawPath(Path path, Paint paint)
-
Path 的使用,通常在绘制组合图形时才使用
-
Path 方法第一类:直接描述路径
-
addXxx() 添加子图形
-
addCircle(float x, float y, float radius, Direction dir)
- 参数:x、y、radius 是圆的基本参数;dir 是画圆的路径方向(分为逆时针、顺时针只有在需要填充图形并且图形相交时才使用)
- addOval()、 addRect()、addRoundRect()、addPath() 方法同上
-
addCircle(float x, float y, float radius, Direction dir)
-
xxxTo() 画线(直线或曲线)
- lineTo(float x, float y)/rLineTo(float x, float y)
- 作用:从当前位置到目标位置画一条直线,一个是绝对坐标,一个是相对坐标
- quadTo(float x1, float y1, float x2, float y2) / rQuadTo(float dx1, float dy1, float dx2, float dy2)
- 作用:画二次贝塞尔曲线。
- cubicTo(float x1, float y1, float x2, float y2, float x3, float y3) / rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)
- 作用:画三次贝塞尔曲线
- moveTo(float x, float y)/rMoveTo(float x, float y)
- 作用:改变当前位置(间接的设置画线时的起点)
- arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo) / arcTo(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean forceMoveTo) / arcTo(RectF oval, float startAngle, float sweepAngle)
- 画弧形
- 参数:增加了 forceMoveTo:是否留下痕迹(true 没有痕迹,false 有痕迹)
- addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle) / addArc(RectF oval, float startAngle, float sweepAngle)
- 画弧形,与 arcTo() 相比,默认没有痕迹
- close()
- 封闭图形,从当前位置和起点之间连线
- lineTo(float x, float y)/rLineTo(float x, float y)
-
addXxx() 添加子图形
-
Path 方法第二类:辅助的设置或计算
- 使用方法较少
- Path.setFillType(Path.FillType ft) 设置填充方式
- 设置图形之间有交集时,交集部分的填充情况
- 情况复杂,用到的时候再说吧
-
Path 方法第一类:直接描述路径
10. darwBitmap(Bitmap bitmap, float left, float top, Paint)
- 将图片绘制到指定位置