现在我有两个按钮。每个人都需要产生不同的声音。在未来,可能会有大约8个按钮,但现在只有两个。
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button btnDrum1 = (Button) findViewById(R.id.btnDrum1);
btnDrum1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(this, R.raw.drum1);
mp.start();
mp.release();
}
});
final Button btnCym1 = (Button) findViewById(R.id.btnCym1);
btnCym1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(this, R.raw.cym1);
mp.start();
mp.release();
}
});
}
}
最初我没有mp.release()并且它会正常播放声音,但最终应用程序会因内存不足而崩溃。现在使用mp.release()它不会崩溃,但有时它在点击时不会播放声音。
单击按钮时,这是播放声音最有效的方法吗?它是可扩展的吗?
答案 0 :(得分:5)
我认为这是因为你在播放时释放它。为每个声音制作一个全局MediaPlayer并反复使用它,在活动关闭时释放(甚至可能在暂停时释放,如果声音文件很大则重新加载)。此外,由于您将有许多按钮,您可以在onCreate()上实例化的所有按钮上都有一个onclicklistener:
private class MyMagicalOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
//play sound 1
break;
case R.id.button2:
//play sound 2
break;
}
}
}
只是评论并告诉我你是否不确定如何实现这个:)
编辑:根据请求,这是一个简洁的实现,应该可以解决您的应用程序的奇迹。我做了它,所以活动实现了onclicklistener,我认为它更干净。
public class Bluarg extends Activity implements OnClickListener{
MediaPlayer mp1;
MediaPlayer mp2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mp1 = MediaPlayer.create(this, R.raw.sound1);
mp2 = MediaPlayer.create(this, R.raw.sound2);
final Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);
final Button button2 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
mp1.start();
break;
case R.id.button2:
mp2.start();
break;
}
}
@Override
protected void onDestroy() {
mp1.release();
mp2.release();
super.onDestroy();
}
}
答案 1 :(得分:3)
如果您的应用有更多按钮,则应使用SoundPool而不是MediaPlayer。因为MediaPlayer会破坏你的应用程序的内存,所以它不再播放声音了。
这对我有所帮助!而且我想你也会 Play sound with SoundPool