Android Paint Stroke某些情况下边框宽度显示一半原因
2017-07-02 22:43
393 查看
转载请注明出处:http://blog.csdn.net/a512337862/article/details/74161988
通过图片可以看出,下面的矩形边框比要窄了一半,但这两个边框设置的宽度是一样的,代码如下:
1.上面的矩形
2.下面的矩形:
通过代码可以看出:两个矩形理论上边框宽度应该一样的,但实际上下面的宽度比上面的要窄了一半。
这两个矩形的实际大小都用黑色的边框标记出来了,通过图片看出,下面的矩形其实有一半的边框没有显示出来,下面的矩形边框有一半在Canvas之外,已经无法被绘制出来了
原因就是:绘制带边框的矩形(其他形状同理),矩形的边界是边框的中心,而不是边框的边界,所以在绘制这些带边框的形状时,需要减去边框宽度的一半。
Ps:在绘制小于canvas的带边框矩形(其他形状同理)时也要减去边框宽度的一半,不然实际大小会与预期大小有所偏差。
前言
一般情况下,自定义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的带边框矩形(其他形状同理)时也要减去边框宽度的一半,不然实际大小会与预期大小有所偏差。
相关文章推荐
- Android View.post(Runable)某些情况不执行的原因
- android textview 中超出屏幕宽度的字符 省略号显示
- android textview 中超出屏幕宽度的字符 省略号显示
- 关于在某些双卡手机上,联通卡抓包抓不到的情况及原因!
- android在特定情况下显示按钮
- android textview 中超出屏幕宽度的字符 省略号显示
- 如何让DIV在内容不固定的情况下宽度刚好显示完内容
- android开发中 解决服务器端解析MySql数据时中文显示乱码的情况
- Android TextView文字太多显示的最后一行被盖住一半的解决办法
- android textview 中超出屏幕宽度的字符 省略号显示
- 【android】两个按钮的宽度各占屏幕的一半
- Android:seekbar控件在某些背景下不能正常显示
- android drawText/drawLines不显示的原因
- Eclipse Android LogCat有时候显示不出输出的原因
- android调用Webservice——天气情况查询(更新,显示自己想显示的信息)
- android 中超出屏幕宽度的字符 省略号显示
- Android下如何计算要显示的字符串所占的宽度和高度
- android sdk<10的情况下,系统才会显示三个点的菜单~~
- Android 4.2中sqlite操作问题(二):某些情况下显式启用事务能提高操作效率
- Android GridView 一行显示数据(包括图片和文本),解决的办法是计算数据占该行的宽度是多少