我有一个MediaPlayer和一个音频文件,我需要播放这些文件,还有一个带有这个音频文件特定秒的ArrayList,在这个秒内,当音频播放时,我需要在ViewPager中切换页面。在这些特定的时刻,如何从CallBack中得到一个MediaPlayer?或者你可能会推荐一些其他的方法来做这件事。
现在我有一种方法,我使用CountDownTimer,它在ViewPager中更改页面,但是它的工作错误,而且它没有考虑到音频轨道可以停止然后恢复这一事实。
public void startPlayingLabels() {
mPlayer = new MediaPlayer();
try {
String mFileName = CameraFragment.mAudioFolder + "/" + ViewActivity.parentName + ".3gp";
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
for (int i=0; i<zeroLabelPosition.size()-1; i++) {
final int finalI = i;
new CountDownTimer(Integer.parseInt(String.valueOf(Integer.parseInt((String) zeroTime.get(finalI + 1)) - Integer.parseInt((String) zeroTime.get(finalI)))), 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
mPager.setCurrentItem(Integer.parseInt(String.valueOf(zeroLabelPosition.get(finalI))));
}
}.start();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}发布于 2016-06-15 10:18:41
没有任何时间线更新,这就是为什么您可以编写自己的,或者您可以使用类似的东西。
CountDownTimer timer;
int timeStampIterator;
int[] timeStamp = new int[5]; // your own time stamps when view must be switched
void play() {
mPlayer.start();
timer = new CountDownTimer(mPlayer.getDuration() - mPlayer.getCurrentPosition(), 1000) {
@Override
public void onTick(long millisUntilFinished) {
int timeSpends = mPlayer.getDuration() - mPlayer.getCurrentPosition();
if (timeSpends == timeStamp[timeStampIterator]) {
//switchToNExtSlide();
timeStampIterator++;
}
}
@Override
public void onFinish() {
}
}.start();
}
void pause() {
mPlayer.pause();
timer.cancel();
timer = null;
}
void stop() {
mPlayer.stop();
timer.cancel();
timer = null;
timeStampIterator = 0;
} 发布于 2016-06-14 13:12:15
您还可以对其使用处理程序,如下所示
Handler handler = new Handler();
Runnable notification = new Runnable() {
public void run() {
startPlayProgressUpdater();// change hear page for view pager, because it call after every 1 second
}
};
handler.postDelayed(notification, 1000);https://stackoverflow.com/questions/37812067
复制相似问题