我在使用下面的代码时遇到了一些麻烦,它似乎是将圆圈画出来的(内向外)。如果我将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。
答案 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的图像。
所以我能想到的唯一问题是getWidth
。检查设置此宽度的布局或代码。可能由于某种原因,这个太低了。为了使您的代码工作,宽度不能小于4(因为有浮点计算,最好是5)。由于drawCircle
无法绘制小于1 pixel。
修改1
在api level 14上运行可以正常工作。