gpt4 book ai didi

java - 完成后,Mediaplayer不会在第一次单击时重新启动

转载 作者:行者123 更新时间:2023-12-03 01:44:23 25 4
gpt4 key购买 nike

使用ViewPager进行图像滑动,每个图像onclick流特定于mp3。

以下操作正常工作:

1-首先单击==)播放MP3。

1次点击==)暂停mp3

3-三次单击==)从暂停的位置重新开始播放mp3。

mp3完成后,请再次单击该图像以重新启动它,因为它不会响应第一次单击,

我尝试了许多代码变体,但均未成功。

请任何帮助将不胜感激。

主要 Activity

 public class MainActivity extends Activity {
private ViewPager mViewPager;
MediaPlayer mp;
private int length;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mViewPager= (ViewPager) findViewById(R.id.view_pager);
ImageAdapter adapter = new ImageAdapter(this);
mViewPager.setAdapter(adapter);

final GestureDetector tapGestureDetector = new GestureDetector(this, new TapGestureListener());
mViewPager.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
tapGestureDetector.onTouchEvent(event);
return false;
}
});
}

private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {


if (mViewPager.getCurrentItem() == 0) {
if(mp != null && mp.isPlaying()){
mp.pause();
length = mp.getCurrentPosition();

}else{

mp = MediaPlayer.create(MainActivity.this, R.raw.aa);
mp.seekTo(length);

mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion( MediaPlayer mp) {
length = mp.getCurrentPosition();

if(mp != null && mp.isPlaying()){
mp = MediaPlayer.create(MainActivity.this, R.raw.aa);
mp.start();
}
}
});
}
}


return super.onSingleTapConfirmed(e);
}
}
}

最佳答案

为什么要在else块中创建一个新的MediaPlayer?那是不正确的。如果MediaPlayer已创建并暂停,那么您要做的就是再次调用start()。绝对没有必要创建新的职位并寻求以前的职位。

我也不太了解您要如何使用完成侦听器。该方法的参数永远不会为空(您要隐藏名称为MainActivitymp成员),并且永远不要让isPlaying()返回true(这是完成操作的回调)。

这只是对您要实现的目标的一种猜测,而我尚未对其进行测试,请尝试以下操作:

public class MainActivity extends Activity {

private ViewPager mViewPager;
MediaPlayer mp;
private boolean isPaused;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mViewPager= (ViewPager) findViewById(R.id.view_pager);
ImageAdapter adapter = new ImageAdapter(this);
mViewPager.setAdapter(adapter);

final GestureDetector tapGestureDetector = new GestureDetector(this, new TapGestureListener());
mViewPager.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
tapGestureDetector.onTouchEvent(event);
return false;
}
});
}

private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (mViewPager.getCurrentItem() == 0) {
if (mp != null) {
if (isPaused) {
mp.start();
isPaused = false;
} else {
mp.pause();
isPaused = true;
}
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.aa);
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer m) {
// Set the MainActivity member to null
MainActivity.this.mp = null;
}
});
}
}
return super.onSingleTapConfirmed(e);
}
}
}

请注意,我不再试图保存当前位置,这只是不必要的。我正在保存 MediaPlayer是否暂停,这对于一般情况是一种合理的做法。 MediaPlayer并不总是快速更新其状态,这可能导致 isPlaying()返回意外值。不过,与本地回放相比,对于流媒体而言,这更值得关注。

关于java - 完成后,Mediaplayer不会在第一次单击时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com