【发布时间】:2012-02-28 12:34:04
【问题描述】:
我有一个SeekBar,它正确显示MediaPlayer 进度。但是,我在寻找时遇到了麻烦——如果我在某处寻找滚动框,它只会返回播放音频文件的位置。
public class EntityPageActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{
private SeekBar seekBar;
private Button startMedia;
private Button pauseMedia;
private MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entity_page);
AudioControl();
}
public void AudioControl(){
seekBar = (SeekBar) findViewById(R.id.seekBar);
startMedia = (Button) findViewById(R.id.play);
pauseMedia = (Button) findViewById(R.id.pause);
startMedia.setOnClickListener(this);
pauseMedia.setOnClickListener(this);
}
public void run() {
int currentPosition= 0;
int total = mp.getDuration();
while (mp!=null && currentPosition<total) {
try {
Thread.sleep(1000);
currentPosition= mp.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return;
}
seekBar.setProgress(currentPosition);
}
}
public void onClick(View v) {
if (v.equals(startMedia)) {
if (mp != null && mp.isPlaying()) return;
if(seekBar.getProgress() > 0) {
mp.start();
return;
}
mp = MediaPlayer.create(EntityPageActivity.this, R.raw.gl1);
mp.start();
seekBar.setProgress(0);
seekBar.setMax(mp.getDuration());
new Thread(this).start();
}
if (v.equals(pauseMedia) && mp!=null) {
mp.pause();
}
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser) mp.seekTo(progress);
}
}
因此,onProgressChanged 不足以让SeekBar 控制MediaPlayer?
我应该添加/更正什么以允许搜索?
谢谢
更新
我发现onProgressChanged 从未因某种原因被调用。但是我不知道为什么
【问题讨论】:
-
@llya 我有媒体播放器,但它可以播放视频,而且效果很好,我可以帮助你吗?
-
我想你知道得更清楚你能不能帮忙)如果你认为你知道如何解决问题,那么试着给出一个答案
-
我建议你将 mp.seekTo(progress) 放在 onStopTrackingTouch() 方法中,因为你需要将搜索栏滚动到特定位置,然后设置媒体播放器进度=搜索栏进度。请在下面查看我的答案..
标签: android media-player seekbar seek