android canvas常用的方法解析(一)

我们知道要想绘制一些特别的效果的话,离不开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
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值