我们知道要想绘制一些特别的效果的话,离不开Paint和Canvas,Paint是你所画图形的一些基本属性,按照面向对象的思想,你要把一个圆画在画布上,那么是有画笔和画布,比如你所画圆的颜色,粗细等都是画笔的属性,而决定所画的位置是由画布决定的,Paint类一些基本的方法上篇讲解了,今天就讲解下Canvas一些常用的方法,后期会配合讲一些自定义view的一些效果,这样更加理解Paint和Canvas一些方法怎么使用以及是怎么个意思,理论实践结合才是王道,进入正题
1):画点
public void drawPoint(float x, float y, Paint paint)
参数说明:
x:表示x轴方法的坐标
y:表示y轴方法的坐标 这坐标是相对于它的父view,而不是屏幕
paint:表示你所画点用到的画笔
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); canvas.drawPoint(100,200,mPaint); }效果:
怎么会什么都没有呢?这是因为犯了一个很低级的错误,你画笔都没设置宽度,怎么可能在画布上所画的能看见,所以添加这行代码即可:mPaint.setStrokeWidth(20); 就可以看见你所画的点了,
除了上面的方法绘制点以外,还有一次性绘制多个点,
public void drawPoints(float[] pts,Paint paint) 绘制多个点
参数说明:
pts:是一个float数组,存储的是点的集合,数组的长度必须>=2,而且数组长度必须是2的倍数,它是每2个数代表一个点,第一个数是x轴坐标,第二个参数表示是y轴坐标
paint:绘制点的画笔
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(100); float[] pts = { 100,200,300,400,500,600}; canvas.drawPoints(pts,mPaint); }这代表绘制3个点(100,200),(300,400),(500,600)效果如下:
绘制多个点还有一个方法就是
public void drawPoints(float[] pts, int offset, int count,Paint paint)
参数说明:
pts:同上
offset:集合中跳过的数值个数,注意不是点的个数!一个点是两个数值,比如你offset=2就表示跳过一个点
count:参与绘制的数值的个数,指pts[]里人数值个数,而不是点的个数,因为一个点是两个数值 比如count=4就表示绘制2个点,因为一个点是等于2个数值(x轴和y轴)
paint:同上
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(100); float[] pts = { 100,100,100,150,100,280,100,400,100,520,100,650}; canvas.drawPoints(pts,2,6,mPaint); }我上面是要绘制(100,100),(100,150),(100,280),(100,400),(100,520),(100,650)这6个点,offset=2表示跳过2个数值,就等于是从第二个点开始画,count=6就表示绘制6个数值,就是3个点,
2):画线
public void drawLine(float startX, float startY, float stopX, float stopY,Paint paint) 2点连接成一条线
参数说明:
startX:第一个点的起始x轴坐标
startY:第一个点的起始y轴坐标
stopX:结束点x轴坐标
stopY:结束点y轴坐标
paint:绘制线所用到的画笔
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(10); canvas.drawLine(100,100,800,800,mPaint); }效果:
这是画一条线,比如我要画多条线 是不是要循环调用这个方法呢?,肯定系统会给相应的方法
public void drawLines(float[] pts, Paint paint)
参数说明:
pts:这个和drawPoints中的参数是同一个意思,不解释
paint:同上
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(10); float[] pts = { 100,100,400,100,400,100,400,400,400,400,100,400,100,400,100,100}; canvas.drawLines(pts,mPaint); }这是由8个点构成了一个矩形,所以画矩形也可以这么画,但几乎不用,除非特殊的需求下会用:
绘制多条直线还有一个方法,
public void drawLines(float[] pts, int offset, int count, Paint paint)
参数说明:
pts:同上
offset:和drawPoints是一样
count:和drawPoints是一样
paint:同上
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(10); float[] pts = { 100,100,400,100,400,100,400,400,400,400,100,400,100,400,100,100}; canvas.drawLines(pts,4,12,mPaint); }在这注意下count的返回时pts的数组长度-offset,在这offet是4而数组的长度为16,所以count的最大值不能超过12,刚才我就犯了这个错,
3):绘制矩形
我们知道2个点可以构成一个矩形,那么第一个绘制矩形的参数就出来了
public void drawRect(float left, float top, float right, float bottom, Paint paint)
参数说明:
left:第一个点距离x轴多少距离(单位像素)
top:第一个点距离y轴多少距离
right:第二个距离x轴多少距离
bottom:第二个点距离y轴多少距离
矩形的长度=right-left 矩形的高度为=bottom-top
@Override protected void onDraw(Canvas canvas) { supe