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

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

前言

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

例子

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

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

1.上面的矩形

@Overrideprotected 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.下面的矩形:

@Overrideprotected 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的带边框矩形(其他形状同理)时也要减去边框宽度的一半,不然实际大小会与预期大小有所偏差。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部