Прямо сейчас у меня есть две кнопки. Каждый должен произвести различный звук. В будущем вероятно, будет приблизительно 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 () это не отказывает, но иногда это не играет звук при нажатии.
Действительно ли это - большая часть efficeient способа играть звук, когда кнопка нажата? Действительно ли это расширяемо?
Я думаю, это связано с тем, что вы выпустили его во время воспроизведения. Создайте глобальный MediaPlayer для каждого звука и используйте его снова и снова, отпустите, когда действие будет закрыто (возможно, даже когда оно приостановлено, и перезагрузите при возобновлении, если звуковые файлы большие). Кроме того, поскольку у вас будет много кнопок, у вас может быть один onclicklistener для всех кнопок, которые вы создаете в onCreate ():
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;
}
}
}
просто прокомментируйте и сообщите мне, если вы не уверены, как это реализовать:)
edit: По запросу, вот изящная реализация, которая должна творить чудеса с вашим приложением. Я сделал так, чтобы вместо этого Activity реализовал 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();
}
}