我買了Android編程的書,對於他們在Github(https://github.com/bmeike/ProgrammingAndroid2Examples/tree/master/AndroidUIDemo)和他們的書中有不同的代碼有點困惑和失望。我被困在一個示例中,該示例教導如何在隨機點繪製一個圓,並指定給該按鈕的顏色,例如,當我單擊紅色按鈕時,它應該在視圖中繪製一個紅色圓圈。canvas.drawCircle有時候工作,有時候不是
我做了一些額外的代碼,並設法讓它工作。這裏是我的onDraw方法:
@Override
protected void onDraw(Canvas canvas)
{
paint.setStyle(Style.STROKE);
paint.setColor(hasFocus() ? Color.BLUE : Color.GRAY);
canvas.drawRect(0, 0, getWidth() - 1, getHeight() - 1, paint);
if (this.points == null) return;
paint.setStyle(Style.FILL);
for (Point p : points.getAllPoints())
{
paint.setColor(p.getColor());
canvas.drawCircle(p.getX(), p.getY(),
p.getDiameter(), paint);
}
}
有時工作,有時沒有,但是當它工作,它吸引薄,大的橢圓形形狀。
p.getDiameter()
總是。即使我把它固定爲6,效果也是一樣的。
此外,還有一些奇怪的事情發生:如果我用50
替換p.getY()
和p.getX()
,它將永遠不會在屏幕上繪製任何東西。 50不應該超出屏幕界限。
在下面的圖片中,您可以看到它正在呈現的內容以及用於創建視圖的一些代碼。
下面是一些額外的相關代碼。
設置pointView大小(在這裏我畫點的地方):
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
pointView.setLayoutParams(new android.widget.LinearLayout.LayoutParams(root.getWidth(), root.getHeight()/2));
}
添加OnCLickListener的按鈕,所以當我點擊它,它應該畫一個圓。
button1.setOnClickListener(new OnClickListener() //I'll not put the Red button here, for the sake of brevity.
{
@Override
public void onClick(View arg0)
{
makeDot(pointModel, pointView, Color.GREEN);
}
});
而且makeDot方法:
private final Random rnd = new Random();
void makeDot(Points points, PointView pointView, int color)
{
points.addPoint(
rnd.nextFloat()*pointView.getWidth(),
rnd.nextFloat()*pointView.getHeight(),
color, POINT_DIAMETER /*always 6*/);
}
(我認爲POINT_DIAMETER應該POINT_RADIUS但現在沒關係。)
所以,我怎樣才能得到它來畫一個圓圈中屏幕中的隨機位置?
我得到了相同的結果,但%,而不是*使它更加難以呈現的東西,也許是因爲某些值<0 我發佈了一個更新我的問題,用截圖,看看:D –
注意它是nextInt(),而不是nextFloat() –
是的,我改變了。 –