Animate ProgressBar update in Android

后端 未结 13 1334
悲哀的现实
悲哀的现实 2020-11-28 04:04

I am using a ProgressBar in my application which I update in onProgressUpdate of an AsyncTask. So far so good.

What I want to do is to animate the prog

13条回答
  •  暖寄归人
    2020-11-28 04:25

    Here is an improved version of @Eli Konky solution:

    public class ProgressBarAnimation extends Animation {
        private ProgressBar mProgressBar;
        private int mTo;
        private int mFrom;
        private long mStepDuration;
    
        /**
         * @param fullDuration - time required to fill progress from 0% to 100%
         */
        public ProgressBarAnimation(ProgressBar progressBar, long fullDuration) {
            super();
            mProgressBar = progressBar;
            mStepDuration = fullDuration / progressBar.getMax();
        }
    
    
        public void setProgress(int progress) {
            if (progress < 0) {
                progress = 0;
            }
    
            if (progress > mProgressBar.getMax()) {
                progress = mProgressBar.getMax();
            }
    
            mTo = progress;
    
            mFrom = mProgressBar.getProgress();
            setDuration(Math.abs(mTo - mFrom) * mStepDuration);
            mProgressBar.startAnimation(this);
        }
    
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            float value = mFrom + (mTo - mFrom) * interpolatedTime;
            mProgressBar.setProgress((int) value);
        }
    }
    

    And usage:

    ProgressBarAnimation mProgressAnimation = new ProgressBarAnimation(mProgressBar, 1000);
    ...
    
    /* Update progress later anywhere in code: */
    mProgressAnimation.setProgress(progress);
    

提交回复
热议问题