嗨,我是Android编程新手,我在构建媒体播放器应用程序方面几乎没有帮助,我在其中使用搜索栏来更新进度,如下所示:
Handler handler = new Handler();
paly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
s_player.start();
p_bar.run();
}
});
Runnable p_bar = new Runnable() {
@Override
public void run() {
start_time = s_player.getCurrentPosition();
s_bar.setProgress((int) start_time);
handler.postDelayed(p_bar, 100);
}
};
所以此代码在100ms后更新sekkbar,但歌曲播放不顺畅???
答案 0 :(得分:1)
我在这里发现了一个错误,可能与问题有关,可能没有。
Runnable p_bar = new Runnable() {
@Override
public void run() {
start_time = s_player.getCurrentPosition();
s_bar.setProgress((int) start_time);
handler.postDelayed(p_bar, 100);
}
};
在p_bar中,您在run()方法中调用postDelayed
,而postDelay()
将runnable对象添加到MessageQueue,Runnable的run()方法将被调用在队列中到达此Runnable对象时的系统。
所以它就像一个循环,你可以运行,postDelay会调用run(),而run()会调用postDelay()....
所以请不要在run方法中调用postDelay()。
答案 1 :(得分:1)
这是我的表现;
paly.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
s_player.start();
handler.postDelayed(p_bar,100);
}
});
Runnable p_bar = new Runnable() {
@Override
public void run() {
s_bar.setProgress((int) s_player.getCurrentPosition());
}
};
现在的问题是它的播放速度很快但没有更新进度条
答案 2 :(得分:0)
你必须实现搜索栏监听器....这对我有用
SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if (fromUser) {
mediaPlayer.seekTo(progress);
seekBar.setProgress(progress);
}
}
};