2012-11-19 5 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 기능에서 상단과 하단을 초기화해야합니다. 따라서 드로잉 할 때마다 화면의 "상단"부터 시작합니다.

또한 모든 원형 차트에 대해 새 Rect를 할당하지 않아야합니다. 하나를 할당하려고 시도하고 offsetTo(50,100)을 사용한 다음 offset(0, 450)을 사용하여 아래로 이동하십시오.

매번 invalidate()를 호출하면 원형 차트가 반복해서 그려지기 때문에 아마도별로 좋지 않을 것입니다.

+0

감사합니다! 그것은 작동합니다 :) –

관련 문제