在Android中绘制的圆圈大于相同大小的位图

时间:2013-07-05 17:05:41

标签: android bitmap drawable

所以我用以下代码绘制了一个圆圈

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);
}

这将在我的屏幕上绘制以下圆圈
circle with bitmap.width == radius*2 circle with bitmap.width == radius*2 on white background

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

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

circle with bitmap.width = radius*2*1.05 circle with bitmap.width == radius*2*1.05 on white background

您可能会看到这些圈子与前一个圈子没有相同的截止值。

这是预期的行为吗?如果我想绘制大小为x的正确圆圈,那么我将始终需要创建大小>的位图。 x然后正确地将圆圈置于其中心?

1 个答案:

答案 0 :(得分:1)

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

在这种情况下,可以通过简单地将Paint属性设置为:

来修复它
Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setColor(Color.RED);
circlePaint.setStyle(Paint.Style.FILL);
circlePaint.setAntiAlias(true);