我有 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
?
我应该添加/更正以允许搜索?
谢谢
UPDATE
我发现 onProgressChanged
永远不会被某种原因调用 . 但是我无法弄清楚为什么
6 回答
问题是
seekBar.setOnSeekBarChangeListener(this);
所以把它放在你的AudioControl()
方法中......你不要将oncheckchangedlistner
设置为你的搜索栏....尝试使用以下代码:
您必须在
onCreate
中包含seekbar方法 . 我遇到了同样的问题,之后就可以了 .在onCreate()方法中尝试此代码并运行该项目 . 我希望这是有效的 .
我正在使用这个简单的代码来做这个伎俩 .
在这里,我在公共课中定义了My SeekBar和MediaPlayer . 然后在OnCreate方法上我有这样的代码:
这里我创建了mPlayer变量,它找到了名为“song”的音频文件,该文件存在于“raw”文件夹中 .
然后我 grab 了名为“audioTraverse”的SeekBar并将其分配给“audioTraverse”变量并抓取音频文件的“持续时间”并将该持续时间分配给我的“audioTraverse”SeekBar,如下所示:
现在我运行的计时器将在每秒后运行,它将相应地更新SeekBar位置 . 请参阅以下代码:
现在我添加“SeekBarChangeListener”,这将查找SeekBar上的任何更改,并在“OnProgressChange()”方法中我使用“.seekTo()”方法转到音频文件中的特定持续时间 . 代码如下:
如果你想通过搜索栏更改进度将媒体播放器恢复到特定位置,我建议你在onStopTrackingTouch()方法中执行此操作 . 该方法将通知用户已完成触摸手势,然后从搜索栏的当前位置设置媒体播放器位置 .