我首先想说的是,我经常使用谷歌来找到一个进度条,它会随着时间的流逝自动填充。我在使用线程 或使用Asynctask 时找到的所有结果。作为 Android 的新手,我认为使用额外的 Handler 来处理进度条的更新更容易完成。
但是,我没有发现任何人按照我的方式进行。它可能违反Android规则吗?例如,我可以同时使用多个 Handlers 吗?
我的代码如下:
public void restarttimebar()
{
stoptimebar();
for(int i=1;i<12;i++)
{
Message msg = timebarhandler.obtainMessage(0,i,0);
timebarhandler.sendMessageDelayed(msg, i*250);
}
};
public void stoptimebar()
{
timebarhandler.removeMessages(0);
Message msg = timebarhandler.obtainMessage(0,0,0);
timebarhandler.sendMessage(msg);
};
Handler timebarhandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
ProgressBar progressbar = (ProgressBar)findViewById(R.id.timebar);
if (msg.arg1 == 0)
{
progressbar.setProgress(0);
}
if (msg.arg1 > 0)
{
progressbar.setProgress(msg.arg1*9);
}
}
};
现在可以调用 restarttimebar(); (重新)启动进度条。它将以每 0.25 秒的增量填充超过 3 秒。非常感谢任何评论!!
编辑: 还添加了一个 stoptimebar();只是停止进度条。此外,进度条的标准大小是 100。所以我只需将 12 次更新乘以 9。它几乎是 100 ;) 在我的应用程序中进度条不必非常精确。
最佳答案
据我所知,您创建的线程和 Asynctasks(非 UI 线程)不应像您的进度条那样触及 UI 内容。如果您需要任务与进度条通信,请使用 Asynctask 并确保与 UI 相关的操作在 onPostExecute() 中完成。此方法也将由主 UI 线程调用。
关于java - 在 Android 应用程序中使用处理程序的 ProgressBar 倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712414/