0

我正在尝试制作流媒体音乐播放器,但在尝试实现的 SeekBar 时遇到了一些问题。目前,它在播放的第一首歌曲上正确运行。我可以正确搜索,它会在另一个线程中自我更新。我遇到的问题是,当一首新歌开始时,SeekBar 从最后一首歌曲的持续时间闪烁到当前歌曲的当前进度。任何帮助,将不胜感激。

SeekBar 声明

    progress = (SeekBar) findViewById(R.id.seekBar1);
    progress.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if(fromUser) {
                media.seekTo(progress);
            }
            else {                  
            }               
        }

        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

    });

SeekBar 在单独的线程中更新

int current = 0;
    int total = media.getDuration();
    progress.setMax(total);
    progress.setIndeterminate(false);

    while(media!=null && current < total){
        try {
            Thread.sleep(1000); 
            current = media.getCurrentPosition();
            progress.setProgress(current);
        } catch (Exception e) {
            e.printStackTrace();
        }
    };
4

2 回答 2

2

您不应该View直接从单独的Thread. 使用View.postrunOnUiThread来更新View

于 2012-07-30T16:55:50.247 回答
0

您开始进行进度更新的线程似乎永远不会终止,这意味着即使在歌曲结束后它也会每秒更新一次进度。

current < total很可能是这里的罪魁祸首。据我记得,当前位置不会(或至少不能保证)一直计数到总长度,因此您的循环永远不会终止,您应该向您添加一个OnCompletionListenerMediaPlayer以便在歌曲结束时获得可靠的通知.

于 2012-07-30T16:53:06.167 回答