前言
在Android中很重要的就是UI,我们来简单总结一下自定义View中的绘制问题
重写绘制方法:最常用的就是onDraw()
绘制的关键是Canvas(画布)
可以使用不同绘制方法来控制遮盖关系
// 先上一段简单的代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 存在各种drawXXX()方法,来满足绘制需求
canvas.drawCircle(50,50, 20,mPaint);
// 存在各种范围裁切方法,clipXXX()来裁切
canvas.clipOutRect(0,0,20,20);
// 几何变换,matrix可以作为一个参数传入drawXXX()方法当中
canvas.drawBitmap(mBitmap, mMatrix, mPaint);
}
Paint
常用方法
// 绘制模式,实心、空心等
paint.setStyle(Style style);
// 颜色
paint.setColor(int color);
// 线条宽度
paint.setStrokeWidth(float width);
// 文字大小
paint.setTextSize(float textSize);
// 抗锯齿开关
paint.setAntiAlias(boolean enable);
Canvas
常用方法
// 将整个区域染色,覆盖原有内容
canvas.drawColor(color);
// 画圆
canvas.drawCircle(x, y, radius, paint);
// 画矩形
canvas.drawRect(left, top, right, bottom, paint);
canvas.drawRect(rect, paint);
// 画点
canvas.drawPoint(x, y, paint);
canvas.drawPoints(pts, offset, count, paint);
canvas.drawPoints(pts, paint);
// 画椭圆
canvas.drawOval(left, top, right, bottom, paint);
// 画线
canvas.drawLine(startX, startY, stopX, stopY, paint);
canvas.drawLines(pts, offset, count, paint);
canvas.drawLines(pts, paint);
// 画圆角矩形
canvas.drawRoundRect(left, top, right, bottom, rx, ry, paint);
// 画弧形或扇形
canvas.drawArc(left, top, right, bottom, startAngle, sweepAngle, userCenter, paint);
// 画自定义图形
canvas.drawPath(path, paint);
// 画bitmap
canvas.drawBitmap(bitmap, left, top, paint);
// 画文字
canvas.drawText(text, x, y. paint);
Path方法
// 直接描述路径
1、addXxx() ---添加子图形,如圆、椭圆、矩形
2、xxxTo() ---画线
lintTo:绝对坐标
rlineTo:相对坐标,从当前位置开始:即最后一次调用画Path方法的终点位置
moveTo()是个很重要的方法,可以移动最后一次调用画Path方法的坐标
close() 封闭当前子图形,由当前位置向起点绘制一条直线
3、当使用addXxx()时,每一个方法的调用都是新增了一个独立的子图形
使用xxxTo等方法时,每一次断线标志着一个子图形的结束
// 辅助的设置和计算
setFillType(FillType fillType) 四个FillType
EVEN_ODD
WINDING(默认值)
INVERSE_EVEN_ODD
INVERSE_WINDING
在使用path时有一个dir参数,是路径的方向
这几个FillType的原理挺复杂,涉及到了射线的方向
大体意思就是一个是全填充,一个是交叉填充,具体的就不多说了,大家可以查有关的资料
总结
1、paint的style,画线还是填充,画线可以设置宽度
2、各种画图形的方法,传入的参数,一般顺序都是:左上右下,一些属性或者操作,最后来一支paint
3、注意画弧度和扇形的方法的参数,挺多个,弧度和扇形的角度:x正方向是0度,顺时针是正角度
4、path的使用,也就是画路径,有按当前位置画的,也有按绝对的坐标来画的,还有“抬起画笔这么一说”
5、path还可以设置各种填充效果,规则跟射线方向和奇偶交点数有关
6、贝塞尔曲线很美,灵活应用需要花时间,以后用到了再慢慢掌握
说白了绘制就是Canvas和Paint,一块高科技的智能画布,一支高科技的智能笔,想要什么效果基本都有,可以精确的画出大部分你想要的图形,说明书已经摆在那了,就看你对他们理解的深刻不深刻了。其实这些东西不用死记硬背,常用的可能会有记忆,不常用的文档笔记拿出来看一下就好了
贴个HenCoder的链接:自定义View-绘制基础
分割线----------------------------------------------
实践
// 不准备写什么了,都比较的简单,基本都是一句话
// 这里要掌握的就是画图时对坐标点的熟悉
// 还有扇形, 圆弧, Path的使用以及那些画图的方法