1. ホーム
  2. android

AndroidでProgressBarの更新をアニメーション化する

2023-09-20 20:53:50

質問

私のアプリケーションではProgressBarを使用しています。 AsyncTask . これまでのところ良好です。

私がやりたいことは、進捗状況の更新をアニメーション化することで、単に値へ "jump" するのではなく、スムーズに値へ移動するようにすることです。

私は以下のコードを実行してそうすることを試みました。

this.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            while (progressBar.getProgress() < progress) {
                progressBar.incrementProgressBy(1);
                progressBar.invalidate();
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    });

問題は、プログレスバーが最終的な値(プログレス変数)を終了するまで、状態を更新しないことです。その間の状態はすべて画面上に表示されません。 progressBar.invalidate()を呼び出しても、解決しませんでした。

何かアイデアはありますか?ありがとうございます!

どのように解決するのですか?

アンドロイドアニメーションを使っています。

public class ProgressBarAnimation extends Animation{
    private ProgressBar progressBar;
    private float from;
    private float  to;

    public ProgressBarAnimation(ProgressBar progressBar, float from, float to) {
        super();
        this.progressBar = progressBar;
        this.from = from;
        this.to = to;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        super.applyTransformation(interpolatedTime, t);
        float value = from + (to - from) * interpolatedTime;
        progressBar.setProgress((int) value);
    }

}

というように呼び出します。

ProgressBarAnimation anim = new ProgressBarAnimation(progress, from, to);
anim.setDuration(1000);
progress.startAnimation(anim);

注意:もしfromとtoの値が低すぎて滑らかなアニメーションが得られない場合は、100程度を乗算してください。そうする場合、setMax(...)も同様に掛けることを忘れないでください。