Canvas绘制圆角矩形时的圆角粗边问题
来源:互联网 发布:服务器自动备份软件 编辑:程序博客网 时间:2024/05/16 11:08
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewCompat.setBackground(findViewById(R.id.text_view), createCircleRect(5, Color.RED, 30)); } public ShapeDrawable createCircleRect(final int strokeWidth, final int strokeColor, final int radius) { Shape shape = new Shape() { @Override public void draw(Canvas canvas, Paint paint) { paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(strokeWidth); paint.setColor(strokeColor); RectF rectf= new RectF(0, 0, getWidth(), getHeight()); canvas.drawRoundRect(rectf, radius, radius, paint); } }; return new ShapeDrawable(shape); }
使用以上代码绘制TextView的背景Shape,会发现,四个圆角的线宽要大于四边直线线宽。如图:
出现这种问题的原因是,使用Style.Stroke绘制粗线,基准线在中线,stroke边由中线向内外扩展。以上代码直接以矩形的最外一圈作为基准线,导致直线边只能绘制向里的一半线宽。所以Shape中的draw方法应该做如下修改:
Shape shape = new Shape() { @Override public void draw(Canvas canvas, Paint paint) { paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(strokeWidth); paint.setColor(strokeColor); int d = strokeWidth / 2; RectF rectF= new RectF(d, d, getWidth()- d, getHeight()- d); canvas.drawRoundRect(rectF, radius, radius, paint); } };
这样显示的圆角矩形就正常了:
感谢文章:Android中Canvas绘图基础详解(附源码下载)给我的提示。
阅读全文
0 0
- Canvas绘制圆角矩形时的圆角粗边问题
- Canvas绘制圆角矩形
- 【坑】【未解答】使用canvas中的arcTo绘制圆角矩形遇到的问题
- canvas.drawRoundRect方法,绘制圆角矩形
- 在Canvas中绘制圆角矩形
- 详述Canvas(五)/绘制圆角矩形
- html5 canvas 绘制圆角矩形
- 详述Canvas(五)/绘制圆角矩形
- HTML5 JS Canvas利用贝塞尔曲线绘制圆角矩形
- html5 canvas元素各种矩形的绘制
- html5<canvas>标签绘制矩形,线条,圆
- HTML5 Canvas: 绘制矩形
- canvas绘制矩形
- canvas绘制矩形
- Canvas学习:绘制矩形
- 1.canvas矩形的绘制以及线的绘制
- Canvas使用 -- 在canvas上绘制圆角矩形并添加文字
- ios-矩形-圆角矩形-椭圆-圆形的绘制
- spring JSR303进行数据验证
- 14位IT高管及技术大牛谈Java的生态系统
- 第23讲项目1-被3或者5整除的数
- 简易版移动端智能家居前端实现--WEUI
- B
- Canvas绘制圆角矩形时的圆角粗边问题
- 招聘数据分析<三>
- springmvc4.3和3.0配置的不同
- kindeditor 在函数中初始化
- android中使用bitmap时防止内存溢出
- 函数参数求值顺序和默认值
- 关于HTTP协议,一篇就够了
- SQLite的路径问题及混合版本问题
- scala中结合元素的操作