每次按下按钮,我的应用都会播放硬币声音。
coin_sound.start();
您可以轻松按压比硬币声音更快。当发生这种情况时,我希望硬币声音从按下按钮开始就开始。
if(coin_sound.isPlaying()){
coin_sound.reset();
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
}
coin_sound.start();
这个问题是尽可能地加载媒体文件仍然是一个相对缓慢的过程。当你开始快速点击按钮时,应用程序会很难落后。
我的问题有什么解决方案吗?我唯一的想法是使用一系列coin_sounds做一些事情,但这种方法看起来会很混乱...... ...
答案 0 :(得分:1)
这里发布的另一个答案有些正确。你不应该一遍又一遍地呼叫create
。
但该答案中的代码存在问题。 reset
方法将MediaPlayer
发送到空闲状态,调用大多数其他方法是非法的。如果你要去那条路线,你必须按以下顺序调用方法:
coin_sound.reset();
coin_sound.setDataSource(...);
coin_sound.prepare();
coin_sound.start();
调用create
和前一个方法调用序列之间的区别仅仅是创建一个新实例。然而,这并不是应该做的最快捷的方式。
当您希望重启当前播放声音时,您应该只需拨打coin_sound.seekTo(0);
。所以做一些像:
if (coin_sound.isPlaying()) coin_sound.seekTo(0);
else coin_sound.start();
假设您已将MediaPlayer
置于准备状态,因此可以调用start
。您可以通过调用reset
侦听器中的setDataSource
,prepare
和onCompletion
来完成此操作。此外,请确保在不再需要声音时拨打release
。
答案 1 :(得分:0)
这是因为你在按钮点击事件中启动了coin_sound,试试这个
在你的oncreate方法中启动这个变量
coin_sound = MediaPlayer.create(getContext(), R.raw.coin02);
然后将其设为您按钮的代码
if(coin_sound.isPlaying()){
coin_sound.reset();
}
coin_sound.start();
问题是你每次点击按钮时都在重新创建一个新的媒体播放器,所以新媒体播放器不会认为有声音
您是否需要使用coin_sound.start();
重新开始?不重启停止然后为你启动声音?