[英]Android sound mediaplayer IllegalStateException and no sound
[英]Mediaplayer sound does not overlap
当您单击按钮时,它会将5加到总和并发出声音。 问题在于,当您反复单击它时,它会增加5,但声音不会重叠。
请参见下面的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_2);
final MediaPlayer plussound = MediaPlayer.create(basic_2.this, R.raw.plus);
Button plus5b = (Button)findViewById(R.id.button);
plus5b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
plussound.start();
for (int i = 1; i <= 5; i++) {
counterValue++;
}
counterdown.setText(String.valueOf(counterValue));
}
});
}
一个MediaPlayer
一次只能播放一种声音,因此您需要为每种声音创建一个新的MediaPlayer
,因此请在onClick
方法中创建它。 另外,请确保在播放声音后使用MediaPlayer.OnCompletionListener
消除声音,以避免出现内存问题。
Button plus5b = (Button)findViewById(R.id.button);
plus5b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mediaPlayer = MediaPlayer.create(basic_2.this, R.raw.plus);
// Adding an onCompletionListener to ensure the MediaPlayer releases the memory after playing
plussound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
mediaPlayer = null;
}
});
mediaPlayer.start();
for (int i = 1; i <= 5; i++) {
counterValue++;
}
counterdown.setText(String.valueOf(counterValue));
}
});
如果要覆盖声音,则需要以下代码:
Button plus5b = (Button)findViewById(R.id.button);
plus5b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 1; i <= 5; i++) {
counterValue++;
}
counterdown.setText(String.valueOf(counterValue));
plussound.start();
}
});
声音方法需要在for循环内而不是外部的原因是,当它在外部并单击按钮时,它仅关闭一次,因为用户每次单击时都不会重复操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.