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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值