所以在我的程序中,我有一个带有一系列按钮的回收器视图,当一个按钮被点击时,它应该会播放一个声音文件。但如果有任何其他声音正在播放,它应该首先停止它们,并播放当前的声音。
但是,当我选择一个并快速选择另一个时,它会重播第一个,然后播放第二个。
编辑:所以我注意到,当第一个文件重放时,它会相对较快地停止,所以它不会播放整个文件,但它仍然会启动
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
for(MediaPlayer player : mediaPlayerList){
if(player.isPlaying()){
player.pause();
player.seekTo(0);
}
}
mediaPlayerList.get(position).start();
}
})
);
}一切正常,这只是第一个选择的声音播放了两次由于一些奇怪的原因,我放置了一个暂停()和seekTo(0),以便它将停止它,并允许它从一开始重放
我不确定这是否相关,但我也得到了一个日志错误: getSlotFromBufferLocked:未知缓冲区: 0xab80f170。
MediaplayerList包含
final List<MediaPlayer> mediaPlayerList = new ArrayList<MediaPlayer>();
mediaPlayerList.add(0,mediaPlayer0);mediaPlayerList.add(1,mediaPlayer1);
mediaPlayerList.add(2,mediaPlayer2);mediaPlayerList.add(3,mediaPlayer3);
mediaPlayerList.add(4,mediaPlayer4);mediaPlayerList.add(5,mediaPlayer5);每个MediaPlayer
final MediaPlayer mediaPlayer0 = MediaPlayer.create(this, R.raw.sound);发布于 2016-02-22 17:04:43
如果一首歌曲已经在播放,而您选择了另一首歌曲,那么您需要停止并重置媒体播放器,而不是执行player.pause(),如下所示
而不是
player.pause();
player.seekTo(0);做
player.stop();
player.reset();编辑:尝试这样做。创建全局媒体播放器对象,如下所示
private MediaPlayer player;然后播放这首歌
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if(player.isPlaying()){
player.stop();
player.reset();
}
player = mediaPlayerList.get(position);
player.start();
}编辑2: OK试试这个
recyclerView= (RecyclerView) findViewById(R.id.meme_list);
adapter = new Adapter(this,getData());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer player) {
player.start();
}
});
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (player.isPlaying())
{
player.stop();
player.reset();
}
player= mediaPlayerList.get(position);
player.prepare();
}
})
);https://stackoverflow.com/questions/35549458
复制相似问题