最精确地测量1000毫秒(每10毫秒更新一次)

时间:2015-07-04 17:18:05

标签: android progress-bar runnable

我正在尝试创建一个发送短信的应用。作为确认,我要求用户按住"发送"按钮一秒钟。我正在显示一个进度条,它就像倒数计时器一样。我想每10毫秒更新进度条的进度并将其递增1.通过这种方法,我将在1秒内获得100%的进展。但我不能那么准确。我尝试过,runnables和倒计时器,但一切都失败了。

现在我正在使用这个" hack"使用milis中的时差计算进度加:

{{1}}

通过这种方法,我在仿真器上获得了+ - 200ms的精度。还有更好的方法可以更准确吗?

先谢谢

2 个答案:

答案 0 :(得分:1)

我可以实现的最顺利的进步是使用ObjectAnimator。我也试过了AsyncTask但过渡在前100-200毫秒内并不够平滑。您可以尝试使用它并查看。

ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 100);
animation.setDuration(1000);
animation.start();

答案 1 :(得分:0)

使用CountDownTimer,它需要2个参数: 1. HowLong直到onFinish被叫并结束计时器.Eg:1000ms 2. OnTick在什么时候被调用.Eg:10 ms

在OnTick中只需添加代码即可更新进度条。下面是一个示例代码,它使用一个简单的ProgressDialog,它每10ms更新一次,并显示从1到100%的进度。

final ProgressDialog progressdialog = ProgressDialog.show(getActivity(), "Will Send SMS", "Please hold on");
final CountDownTimer timer = new CountDownTimer(1000, 10) {
    @Override
    public void onTick(long millisUntilFinished) {
        Log.v("ranjapp", "Ticking " + millisUntilFinished / 10);
        progressdialog.setMessage("Will send SMS in " + millisUntilFinished / 10+" %");
    }

    @Override
    public void onFinish() {
        Log.v("ranjapp", "Countdowntimer onfinish called");
        progressdialog.dismiss();
    }
}.start();

您可以将上述内容从ProgressDialog更改为任何其他进度对话框。