0

我有一个进度条,我想准确推进 5 秒。我试图通过 'for' 循环 10 次,每次循环运行时,进度条都会增加 1/10。我有将条形增加 1/10 的代码,但我现在尝试创建一个循环:

将条增加到 1/10 等待 0.5 秒...将条增加到 2/10 等待 0.5 秒...将条增加到 3/10 等待 0.5 秒...等等。

到目前为止,这是我的代码,但它不起作用,它将栏提高到 10/10(满)。有任何想法吗?

非常感谢。

             for(int a = 0; a <= 10; a++){  
                 if(mp1.isPlaying()){   // my 5 second wav file

                       int newProgress = pBar1.getProgress() + (pBar1.getMax() / 10);
                        if (newProgress < 0) {
                            newProgress = 0;
                           }
                  pBar1.setProgress(newProgress);
                 // pause for 0.5 seconds here//
               }
4

2 回答 2

1

Thread.sleep(500);将暂停半秒。但是您必须在 UI 线程以外的线程中执行此操作。如果您让 UI 线程进入睡眠状态,您应用中的所有其他交互都将锁定,直到睡眠结束。

于 2012-08-08T22:45:16.003 回答
1

您要问的问题是,虽然我让线程 sleep很容易暂停 0.5 秒,但您的整个 UI 都会冻结,这很糟糕,您不应该这样做。

您真正的问题似乎是您想要一个进度条来说明您正在播放的音频剪辑中经过的时间。如果您使用MediaPlayer,您可以使用getCurrentPositiongetDuration计算任何大小的音频剪辑。IE:

//Calculate the current clip position as a value between 0 and 100
int progress = (int) ((float) mp1.getCurrentPosition() / mp1.getDuration() * 100);
于 2012-08-08T22:56:53.090 回答