Android Paint Stroke某些情况下边框宽度显示一半原因

来源:互联网 发布:人民币大写转换编程 编辑:程序博客网 时间:2024/05/29 19:50

转载请注明出处:http://blog.csdn.net/a512337862/article/details/74161988

前言

一般情况下,自定义View时,绘制带边框的形状时,因为边界实际的位置是在边框的中间,所以都要减去边框宽度的一半,不然的在某些特定的情况下,边框会有一半无法显示(例如,绘制和画布同样大小的矩形边框,这里就以这种情况来简单解释一下)。

例子

简单的看一个例子:
这里写图片描述

通过图片可以看出,下面的矩形边框比要窄了一半,但这两个边框设置的宽度是一样的,代码如下:

1.上面的矩形

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        paint.setStyle(Paint.Style.STROKE);        paint.setColor(Color.parseColor("#aaffcc"));        paint.setStrokeWidth(20);        rect.set(20/2,20/2,getWidth() - 20/2,getHeight()-20/2);        canvas.drawRect(rect,paint);        }

2.下面的矩形:

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        paint.setStyle(Paint.Style.STROKE);        paint.setColor(Color.parseColor("#ccaaff"));        paint.setStrokeWidth(20);        rect.set(0,0,getWidth(),getHeight());        canvas.drawRect(rect,paint);        }

通过代码可以看出:两个矩形理论上边框宽度应该一样的,但实际上下面的宽度比上面的要窄了一半。

原因

简单解释一下原因:

这里写图片描述

这里写图片描述

这两个矩形的实际大小都用黑色的边框标记出来了,通过图片看出,下面的矩形其实有一半的边框没有显示出来,下面的矩形边框有一半在Canvas之外,已经无法被绘制出来了
原因就是:绘制带边框的矩形(其他形状同理),矩形的边界是边框的中心,而不是边框的边界,所以在绘制这些带边框的形状时,需要减去边框宽度的一半。

Ps:在绘制小于canvas的带边框矩形(其他形状同理)时也要减去边框宽度的一半,不然实际大小会与预期大小有所偏差。