2013-10-14 38 views
1

我買了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不應該超出屏幕界限。

在下面的圖片中,您可以看到它正在呈現的內容以及用於創建視圖的一些代碼。

my results

下面是一些額外的相關代碼。

設置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但現在沒關係。)

所以,我怎樣才能得到它來畫一個圓圈中屏幕中的隨機位置?

回答

2

這裏有一些想法:

在addPoint,試圖產生這樣的座標:

points.addPoint(
      rnd.nextInt() % pointView.getWidth(), 
      rnd.nextInt() % pointView.getHeight(), 
      color, POINT_DIAMETER /*always 6*/); 

在你的onClick方法,嘗試將呼叫無效:

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); 
      pointView.invalidate(); 
     } 
    }); 

當您設置Style.FILL時,同樣設置顏色:

paint.setStyle(Style.FILL); 
paint.setColor(hasFocus() ? Color.BLUE : Color.GRAY); 

此外,刪除這行代碼:

pointView.setScaleX(20); 

這就是所有我能現在想到的。

希望這有助於:)

+0

我得到了相同的結果,但%,而不是*使它更加難以呈現的東西,也許是因爲某些值<0 我發佈了一個更新我的問題,用截圖,看看:D –

+0

注意它是nextInt(),而不是nextFloat() –

+0

是的,我改變了。 –

相關問題