我正在尝试创建一个发送短信的应用。作为确认,我要求用户按住"发送"按钮一秒钟。我正在显示一个进度条,它就像倒数计时器一样。我想每10毫秒更新进度条的进度并将其递增1.通过这种方法,我将在1秒内获得100%的进展。但我不能那么准确。我尝试过,runnables和倒计时器,但一切都失败了。
现在我正在使用这个" hack"使用milis中的时差计算进度加:
{{1}}
通过这种方法,我在仿真器上获得了+ - 200ms的精度。还有更好的方法可以更准确吗?
先谢谢
答案 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更改为任何其他进度对话框。