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的带边框矩形(其他形状同理)时也要减去边框宽度的一半,不然实际大小会与预期大小有所偏差。
阅读全文
0 0
- Android Paint Stroke某些情况下边框宽度显示一半原因
- Android下Shape设置stroke描边部分机型不显示边框线
- Android View.post(Runable)某些情况不执行的原因
- Android stroke 边框线 某一边
- Android stroke 边框线 某一边
- Android stroke 边框线 某一边
- 分页页码结构宽度不确定情况下的居中显示
- RecyclerView条目宽度显示为一半
- Android中调用Paint的measureText()方法取得字符串显示的宽度值
- Android中调用Paint的measureText()方法取得字符串显示的宽度值
- SVG 边框(stroke)
- Android用Paint计算文字宽度
- Android用Paint计算文字宽度
- android stroke
- 模型Skinned Mesh在某些情况下不显示的解决
- Android:seekbar控件在某些背景下不能正常显示
- android在特定情况下显示按钮
- ~/.bash_profile在某些情况下没有执行
- 150个常用的Linux命令汇总
- 拼多多查排名、拼多多查销量、拼多多提升排名工具(免费赠送)
- opencascade-7.1.0编译 win7 64位 vs2010
- 解决你最痛苦的根本途径--自律。
- 什么是标记接口
- Android Paint Stroke某些情况下边框宽度显示一半原因
- 7.代理模式
- HTML基础--表格标签 04
- 8.工厂方法
- 仿QQ左滑删除
- Microsoft.CSharp.RuntimeBinder.RuntimeBinderException类型未处理的异常在 System.Core.dll 中发生
- 9.原型模式
- 设计模式(20)-Command 命令模式
- centos6.5 安装git