作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一个带有录音机和播放器的应用程序。我正在使用 mediaplayer 播放录制的 .wav 文件,同时我想更新到搜索栏。一切正常但我的问题是媒体播放器对搜索栏的进度更新并不顺利,如果我们正在播放一个小文件,搜索栏的拇指会在几秒钟内或之间跳跃。
任何人都可以帮助我解决问题,以使其在搜索栏中顺利搜索进度。我的代码如下所示。我被卡在这里了。
mediaPlayerIntiate();
mediaPlayerSetSource();
mMediaPlayer.start();
task = new TimerTask() {
@Override
public void run() {
Graphbar.post(new Runnable() {
@Override
public void run() {
if (mMediaPlayer != null) {
if (playButtonState == MediaMode.PLAY) {
if (mMediaPlayer.isPlaying()) {
Graphbar.setProgress(mMediaPlayer
.getCurrentPosition());
mediaPlayerUpdateTimer(mMediaPlayer
.getCurrentPosition());
enableRewindandForward();
}
}
}
}
});
}
};
timer = new Timer();
timer.schedule(task, 0, 8);
最佳答案
mMediaPlayer.getCurrentPosition() 返回当前时间(以毫秒为单位),您将其更新为最大容量为 100 的 Seekbar。用文件长度和 100 制作一个公式。试试这个函数
MediaPlayer mMediaPlayer = new MediaPlayer();
final SeekBar mSeelBar = new SeekBar(this);
final int duration = mMediaPlayer.getDuration();
final int amoungToupdate = duration / 100;
Timer mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!(amoungToupdate * mSeelBar.getProgress() >= duration)) {
int p = mSeelBar.getProgress();
p += 1;
mSeelBar.setProgress(p);
}
}
});
};
}, amoungToupdate);
并且这个过程应该在媒体播放器开始播放时被调用。里面
mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
**// call here**
}
});
更新
在几秒钟内更新 125 次不是你应该做的。请增加更新 SeekBar 的间隔。我在阅读 NullPointer 的评论后添加了这个
关于android - Mediaplayer 进度更新到 seekbar 不顺畅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742477/
我是一名优秀的程序员,十分优秀!