0

for ループを使用して複数の円グラフを描画したいのですが、データは配列 ( data[][][]) に格納されています。top+=450; bottom+=450;各チャートの描画が完了すると、チャートが重ならないように、上と下に 450 ( ) を加えたものを作成します。しかし、その結果、円グラフは常に下に移動します。invalidate()行末に追加しようとしましたが、うまくいきません。

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;
    }           
}
4

2 に答える 2

2

topbottomはインスタンス変数です。それらをローカルにして、onDrawメソッドに移動してください。これで、呼び出されるたびにそれらを変更し、終了後にonDrawリセットされなくなりました。top=100,bottom=500onDraw

于 2012-11-19T14:03:22.613 に答える
1

あなたの質問のタイトルはかなり誤解を招くものです...そこに本当に無限のループがあるようには聞こえません。

onDraw関数でtopとbottomを初期化する必要があります。したがって、描画するたびに画面の「上部」から開始します。

また、すべての円グラフに新しいRectを割り当てないようにする必要があります。1つを割り当て、を使用してからoffsetTo(50,100)、を使用offset(0, 450)して下に移動してみてください。

毎回invalidate()を呼び出すと、円グラフが何度も描画されます...おそらくあまり効果がありません。

于 2012-11-19T14:07:27.000 に答える