2012-11-19 46 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

谢谢!有用 :) –