canvas教程

setStrokeWidth() 方法思考

字号+ 作者:H5之家 来源:H5之家 2017-11-21 13:01 我要评论( )

setStrokeWidth()是Paint中的一个方法,自定义View的时候经常用到 1 2 3 4 5 6 7 /** * Set the width for stroking. 设置描边的宽度(也就是控制画笔的粗细) *

setStrokeWidth()是Paint中的一个方法,自定义View的时候经常用到

(float width) { nSetStrokeWidth(mNativePaint, width); //native 方法 }

举个例子,首先自定义一个View,在onDraw()方法中添加如下方法:

Paint rectPaint = new Paint(); rectPaint.setStyle(Paint.Style.STROKE); RectF rect0 = new RectF(100, 100, 700, 700); canvas.drawRect(rect0, rectPaint); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth(80); paint.setStyle(Paint.Style.STROKE); canvas.drawArc(rect0, 0, 90, false, paint);

我的本意是在这个矩形形成一个内切圆弧的但是结果如下:

这里写图片描述

可以看出一旦要是设置的strokeWidth足够大的情况下,就会有一半在外边了。那要想形成内切弧线就应该对矩形做改变才行。我们把RectF(100, 100, 700, 700) 换成 RectF(140,140,660,660)再次进行尝试。为了和 上图作比较,我在上面的代码上接着添加如下代码:

RectF rect1 = new RectF(140, 140, 660, 660); Paint paint2 = new Paint(); paint2.setColor(Color.BLUE); paint2.setStyle(Paint.Style.STROKE); paint2.setStrokeWidth(80); canvas.drawArc(rect1, 0, -90, false, paint2);

效果图如下:

这里写图片描述

这个时候蓝色圆弧正好为内切弧。

那么可总结为这样:

如果一个矩行要想内切圆写代码的时候只需要在原来的矩行上 left top 各加上strokeWidth的一半, right bottom各减去 strokeWidth的一半即可。

在做比较复杂的自定义View的时候,特别是那种复杂图形之间间距要求比较严谨的情况,一定要充分考虑这方面的问题。

// 位置 mRectF.left = mCircleLineStrokeWidth / 2 ; mRectF.top = mCircleLineStrokeWidth / 2 ; mRectF.right = width - mCircleLineStrokeWidth / 2 ; mRectF.bottom = height - mCircleLineStrokeWidth / 2 ; );

如果是圆的话,就是

canvas.drawCircle(width/2,width/2,width/2- mCircleLineStrokeWidth / 2,mBgPaint);

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 海思板卡SATA最佳读写块大小测试

    海思板卡SATA最佳读写块大小测试

    2017-11-21 12:09

  • Canvas开篇之drawBitmap方法讲解

    Canvas开篇之drawBitmap方法讲解

    2017-11-20 10:13

  • 移动网页html5的canvas画布生成缩略图的方法

    移动网页html5的canvas画布生成缩略图的方法

    2017-11-14 15:22

  • 绘制HTMl5 Canvas旋转风车的方法技巧

    绘制HTMl5 Canvas旋转风车的方法技巧

    2017-11-11 17:27

网友点评