0

現在、静的アークを作成できます

例えば:

ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(90, 12));
    progressArc.setIntrinsicHeight(100);
    progressArc.setIntrinsicWidth(100);
    progressArc.getPaint().setColor(Color.RED);
    ImageView iView = (ImageView) findViewById(R.id.background_circle);
    iView.setImageDrawable(progressArc);

ここで、background_circle は、弧が作成される imageView です。しかし、すべてをループに入れて ArchShape の 2 番目のパラメーターに動的な値を与えようとすると、最後のインスタンスしかレンダリングされません。また、スレッドをスリープさせようとしましたが、以前のインスタンスがレンダリングされているのを確認できませんでした。

int i=0;

    while(i<12)
    {
    ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(90, i*12));
    progressArc.setIntrinsicHeight(100);
    progressArc.setIntrinsicWidth(100);
    progressArc.getPaint().setColor(Color.RED);
    ImageView iView = (ImageView) findViewById(R.id.background_circle);
    iView.setImageDrawable(progressArc);

    i++;
    }

ご意見をお聞かせください。

4

2 に答える 2

1

これが他の人に役立つことを願っています:

Handler handler = new Handler(); 
        while(i<30)
        {
            i++;
            handler.postDelayed(new Runnable()
            { 
                public void run() 
                {  

                    ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(0, 12*i));
                    progressArc.setIntrinsicHeight(5);
                    progressArc.setIntrinsicWidth(5);
                    progressArc.getPaint().setColor(Color.BLUE);
                    iView = (ImageView) findViewById(R.id.background_circle);
                    iView.setImageDrawable(progressArc);

                    i++;
                }
            }, 1000*i);

        } 

誰かがより効率的な解決策を持っている場合は、私に知らせてください。:)

于 2013-01-07T15:29:25.723 に答える
0

あなたはこれをタイトループでやっています。ImageView のイメージ ドローアブルを設定すると、UI スレッド キューにメッセージが配置され、ImageView が再描画されます。

ただし、ループでは UI スレッドがキューを処理するのに十分な時間がないため、ループが終了してからしばらくしてから更新が行われます。したがって、最後のものだけが表示されます。

これを行うにはいくつかの方法がありますが、おそらく最も簡単なのは、ランナブルでアークを描画し、タイマーを使用して各スイープを描画することです。

于 2013-01-04T17:22:43.433 に答える