具有可变增量速度的Android ProgressBar取决于进度

时间:2015-11-28 00:44:53

标签: android multithreading handler runnable android-progressbar

我有一个简单的progressBar,其Max设置为100。

我需要以两种不同的速度增加它。

最初快速达到60,然后一旦达到60,它会以低增量速度一直变慢到100。

我使用处理程序和一个包含该值的界面来完成它,但它在UI上跳过很多帧。

有人可以展示如何使用单独的线程来避免跳过警告吗?

我非常感激。

1 个答案:

答案 0 :(得分:0)

试试这段代码

public class MainActivity extends AppCompatActivity {

    private final static int FAST_SPEED = 2;
    private final static int SLOW_SPEED = 1;
    private final static int UPDATE_TIME = 50;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mProgressBar = (ProgressBar) findViewById(R.id.progress);
        postUpdate();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mUpdateHandler.removeCallbacks(mUpdateRunnable);
    }

    private void postUpdate() {
        mUpdateHandler.postDelayed(mUpdateRunnable, UPDATE_TIME);
    }

    private final Handler mUpdateHandler = new Handler();
    private final Runnable mUpdateRunnable = new Runnable() {
        @Override
        public void run() {
            if (mProgress > 100) {
                return;
            } else if (mProgress <= 60) {
                mProgress += FAST_SPEED;
            } else if (mProgress > 60) {
                mProgress += SLOW_SPEED;
            }
            mProgressBar.setProgress(mProgress);
            postUpdate();
       }
    };

    private ProgressBar mProgressBar;
    private int mProgress;
}

您可以更改FAST_SPEED,SLOW_SPEED和UPDATE_TIME值以自定义进度栏填充速度