2012-11-19 73 views
0

我想通過使用for循環繪製多個餅圖,並將數據存儲在數組中(data[][][])。當每個圖表繪製完成後,我將頂部和底部加上450(top+=450; bottom+=450;)以避免圖表重疊。但結果是餅圖不斷地向下移動。我嘗試在行尾添加invalidate(),但它不起作用。Android:爲什麼無盡循環在onDraw()?

private String data[][][]=... //store some data 
private float left=50,top=100,right=450, bottom=500; 

public void onDraw(Canvas c) { 

    super.onDraw(c); 
    Paint paint = new Paint(); 
    RectF rec; 
    for(int j=0;j<data.length;j++){ 
     rec=new RectF(left,top,right,bottom); 
     //draw a pie chart 
     for (int i = 0; i < data[j].length; i++) { 
      float drawDegree = (float)Integer.parseInt(data[j][i][1])/100* 360f; 
      c.drawArc(rec, -90, drawDegree, true, paint); 
     } 

     top+=450; 
     bottom+=450; 
    }   
} 
+0

是你的循環? – kabuto178

回答

2

topbottom是實例變量。儘量讓他們本地化,將他們移動到onDraw方法。現在您每調用一次onDraw就更改它們,並且在onDraw完成後它們不會重置爲top=100,bottom=500

+0

謝謝!它的作品:) –

1

你的問題的標題是非常誤導的......聽起來不像真的是有任何死循環出現。

您應該在onDraw函數中初始化頂部和底部。所以你每次畫畫時都從屏幕的「頂部」開始。

此外,你應該儘量不分配一個新的矩形爲每個餅圖。 嘗試分配一個,使用offsetTo(50,100)然後用offset(0, 450)往下移動。

調用Invalidate()每次只會讓被一再拉你的餅圖......可能不會有很大的裨益。

+0

謝謝!有用 :) –