0

所以我用下面的代码画了一个圆圈

public void drawCircle(int radius, ImageView imageView)
{
    Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    circlePaint.setStrokeWidth(1);
    circlePaint.setColor(Color.RED);
    circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);
    circlePaint.setAntiAlias(true);

    Bitmap circleBitmap = Bitmap.createBitmap(radius*2, radius*2, Bitmap.Config.ARGB_4444);
    Canvas circleCanvas = new Canvas(circleBitmap);
    circleCanvas.drawCircle(radius, radius, radius, circlePaint);
    //canvas.drawColor(Color.WHITE); used on the picture to the right
    imageView.setImageBitmap(circleBitmap);
}

这将在我的屏幕上绘制以下圆圈
bitmap.width == 半径*2 的圆 白色背景上带有 bitmap.width == radius*2 的圆圈

正如您可能看到的,圆圈的顶部、底部、左侧和右侧部分被略微切断。将位图的背景颜色设置为白色显示了罪魁祸首。绘制的圆与位图的宽度和高度相同,半径比位图略大。

为了确保这是正在发生的事情,我尝试绘制相同大小的圆圈,但我将位图的大小增加了大约 5% 并将圆圈居中。这给了我以下信息:

bitmap.width = 半径*2*1.05 的圆 白色背景上带有 bitmap.width == radius*2*1.05 的圆圈

正如您可能看到的那样,这些圆圈与之前的圆圈没有相同的截止值。

这是预期的行为吗?如果我想绘制大小为 x 的正确圆圈,那么我是否总是需要创建大小 > x 的位图,然后将圆圈正确居中在其中?

4

1 回答 1

1

所以我想出了为什么会这样。其实很简单。
描边被添加到圆的半径之外。因此,半径 = 10pxStroke = 2px的圆的绘制半径为12px,但仍被视为半径为 10px 的圆。

在这种情况下,可以通过简单地设置 Paint 属性来修复它:

Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(Color.RED);
circlePaint.setStyle(Paint.Style.FILL);
circlePaint.setAntiAlias(true);
于 2013-08-29T16:19:57.840 回答