我真的是编程新手,这是我第一次尝试应用程序。我有一个带有按钮的表格布局,我希望每个按钮都能播放声音(即音板)。我可以很好地处理这个问题,但是我现在有 40 个按钮,每个按钮我都在调用媒体播放器的新实例,所以最终我最终会得到太多并且声音停止播放。
我为每个按钮都有以下代码:
MediaPlayerMP1 = MediaPlayer.Create (this, Resource.Raw.sound01);
Button button1 = FindViewById<Button> (Resource.Id.button1);
button1.Click += (object sender, EventArgs e) =>
{
MP1.Start();
MP1.Release();
};
MediaPlayer MP2 = MediaPlayer.Create (this, Resource.Raw.sound01);
Button button2 = FindViewById<Button> (Resource.Id.button2);
button2.Click += (object sender, EventArgs e) =>
{
MP2.Start();
MP2.Release();
};
等。
我意识到这是非常重复和糟糕的代码。有人告诉我我需要使用媒体播放器的全局实例并在播放声音后释放它,但我不知道如何做这两件事。我还发现了一个建议,可以做这样的事情:
private int buttonIds = { R.id.button01, R.id.button02, R.id.button03, R.id.button04, etc };
private int soundIds = { R.raw.sound01, R.raw.sound02, R.raw.sound03, R.raw.sound04, etc };
任何关于直接代码示例的帮助都会对我有很大帮助,谢谢
这可能会对你有所帮助...
final MediaPlayer player = new MediaPlayer();
final Resources res = getResources();
final int[] buttonIds = { R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 };
final int[] soundIds = { R.raw.s1, R.raw.s2, R.raw.s3, R.raw.s4, R.raw.s5, R.raw.s6, R.raw.s7, R.raw.s8, R.raw.s9 };
// On Click Listener tells the button to play the sound.
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < buttonIds.length; i++) {
if (v.getId() == buttonIds[i]) {
selectedSoundId = soundIds[i];
AssetFileDescriptor afd = res.openRawResourceFd(soundIds[i]);
player.reset();
try {
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
player.start();
break;
}
}
}
};
// Matches the button with its correct sound???
for (int i = 0; i < buttonIds.length; i++) {
Button soundButton = (Button)findViewById(buttonIds[i]);
registerForContextMenu(soundButton);
soundButton.setOnClickListener(listener);
}
把它放在你的 MainActivity.java 的 OnCreate 方法中。在代码"int selectedSoundId;"中的方法类型之外,否则将出现错误。另外,请确保使用按钮,否则会收到另一个错误。希望这有帮助!!