Canvas.DrawCircle在半径为<时反转圆圈。 1

时间:2011-12-29 03:40:57

标签: java android

我在使用下面的代码时遇到了一些麻烦,它似乎是将圆圈画出来的(内向外)。如果我将radius参数从0.25f更改为1.0f,那么它会绘制一个圆。

    /* this changes the scale to 0 to 1 */
    float scale = (float) getWidth();
    canvas.save(Canvas.MATRIX_SAVE_FLAG);
    canvas.scale(scale, scale);

    Paint basicpaint= new Paint();
    basicpaint.setAntiAlias(true);
    basicpaint.setColor(Color.RED);
    handScrewPaint.setStyle(Paint.Style.FILL);

    canvas.drawCircle(0.5f, 0.5f, 0.25f, basicpaint);

有人能让我直截了当吗?

更新:我使用的是SDK版本14,如果我切换到版本4,则此代码有效。在您提出要求之前,我不能切换版本,因为我的应用程序需要14个API。

2 个答案:

答案 0 :(得分:0)

不确定您使用比例代码的原因

尝试使用以下代码,虽然0.25f圆圈太小而无法用肉眼观察,但似乎工作正常

    protected void onDraw(Canvas canvas) {
        Paint basicpaint= new Paint();
        basicpaint.setAntiAlias(true);
        basicpaint.setColor(Color.RED);
        basicpaint.setStyle(Paint.Style.FILL);
        canvas.drawCircle(100f, 100f, 0.25f, basicpaint);
    }

答案 1 :(得分:0)

好吧,我尝试了上面的代码,它工作正常。有趣的是,如果我将minSdkVersion设为14,它会绘制一些东西,但结果却不对。即使我在ICS设备上运行,将minSdkVersion更改为13也可以正常工作。我尝试禁用硬件加速(如@John Willis所说),minSdkVersion设置为14可行。以下是摘要摘要:

  • 如果将minSdkVersion设置为14,则默认情况下启用硬件加速。
  • 如果将minSdkVersion设置为13,则默认情况下HW加速关闭。

soln 1:手动关闭硬件或minSdkVersion soln 2:通过计算像

这样的比例因子来扩展自己
float scale = (float) getWidth();
mscale.setScale(scale);
.....
canvas.drawCircle(mscale.getX(0.5f), mscale.getY(0.5f),
            mscale.getUniScaled(0.25f), basicpaint);

比例等级

    class MyScale {
    float scaleX;
    float scaleY;
    float uniformScale;

    public void setScale(float scale) {
        scaleX = scale;
        scaleY = scale;
        uniformScale = scale;
    }

    private float getX(float x) {
        return x * scaleX;
    }

    private float getY(float y) {
        return y * scaleY;
    }

    private float getUniScaled(float value) {
        return value * uniformScale;
    }
}

这是api等级10的图像。

Circle

所以我能想到的唯一问题是getWidth。检查设置此宽度的布局或代码。可能由于某种原因,这个太低了。为了使您的代码工作,宽度不能小于4(因为有浮点计算,最好是5)。由于drawCircle无法绘制小于1 pixel

修改1

在api level 14上运行可以正常工作。

Circle with api level 14