setStrokeWidth() 方法思考

最近新买一款Nexus 6 手机,看着手机上原生的Android 界面,一种说不出的感觉!这可能就是对谷歌的信仰!

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

    /**
     * Set the width for stroking. 设置描边的宽度(也就是控制画笔的粗细)
     * Pass 0 to stroke in hairline mode.
     */
    public void setStrokeWidth(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的时候,特别是那种复杂图形之间间距要求比较严谨的情况,一定要充分考虑这方面的问题。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值