- 这个一个系列,本系列讲的都是本人自定义 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() 方法同上
- 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)
- close()
- Path 方法第二类:辅助的设置或计算
- 使用方法较少
- Path.setFillType(Path.FillType ft) 设置填充方式
- 设置图形之间有交集时,交集部分的填充情况
- 情况复杂,用到的时候再说吧
10. darwBitmap(Bitmap bitmap, float left, float top, Paint)
- 将图片绘制到指定位置