自定义视图Android上错误的笔画宽度绘制圆圈

Posted

技术标签:

【中文标题】自定义视图Android上错误的笔画宽度绘制圆圈【英文标题】:Wrong Stroke width drawing circle on custom view Android 【发布时间】:2015-11-27 08:51:59 【问题描述】:

我正在 android 中编写自定义视图。我想画一个覆盖我视图所有宽度和高度的圆圈。这是我的代码

private void init() 

    bgpaint = new Paint();
    bgpaint.setColor(bgColor);
    bgpaint.setAntiAlias(true);
    bgpaint.setStyle(Paint.Style.STROKE);
    bgpaint.setStrokeWidth(strokeWidth);
    rect = new RectF();



@Override
protected void onDraw(Canvas canvas) 
    super.onDraw(canvas);
    // draw background circle anyway
           int strokeWidth = 50;
    rect.set(strokeWidth, strokeWidth, getwidth()- strokeWidth, 
            getheight() - strokeWidth);
    canvas.drawArc(rect, -90, 360, fill, bgpaint);


但是当我运行结果会是这样的

我想要这样

我的代码有什么问题?

【问题讨论】:

调用rect.set时必须使用strokeWidth / 2f,而不是strokeWidth 【参考方案1】:

问题在于设置矩形的坐标。您必须设置笔划宽度的一半,而不是整个笔划宽度。

    float left=strokeWidth / 2;
    float top=strokeWidth / 2;
    float right=minDimen - strokeWidth/ 2;
    float bottom=minDimen - strokeWidth / 2;
    rect.set(left, top, right,bottom);

因为涉及到圆形,我假设您的 circleView 的宽度和高度是相同的尺寸。那是我代码中的 minDimen 。因为我使用这两者中较小的尺寸。

final int minDimen = Math.min(width, height);
setMeasuredDimension(minDimen, minDimen);  

(必须在 onMeasure 方法中调用) 无论如何,将宽度和高度设置为相同尺寸的好方法。

【讨论】:

以上是关于自定义视图Android上错误的笔画宽度绘制圆圈的主要内容,如果未能解决你的问题,请参考以下文章

android中的自定义视图

Android 在 google pay 中绘制自定义视图

圆段笔画动画以完整笔画结束

如何在绘制之前获取调整大小的自定义视图的宽度和高度

自定义视图绘制圆产生椭圆

使用Android在xml中使用ShapeDrawable绘制多个形状