[英]Android : How to play a sound depending on the button that is pressed?
我是Android的新手,我想根據用戶按下的按鈕來播放聲音。
我設法在按下按鈕時播放了聲音,但必須指定要播放的文件。
我想做的是找到一種動態設置R.raw.arthaswhat5參數的方法,以便將其設置為最后按下的按鈕。
public void listen(View w){
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat5);
mediaPlayer.start();
}
我認為以與文件相同的方式命名按鈕可能會有所幫助,但我不太了解R的工作原理...我知道我可以將v.getId()整數知道按下哪個按鈕,但是我可以請勿使用此ID相應地播放聲音...
您要使用聲音池http://developer.android.com/reference/android/media/SoundPool.html
在“ res”文件夾中,添加一個名為“ raw”的文件夾,然后將您的聲音文件放入其中。 我使用了.m4a文件,它對我有用,但是我不確定是否支持其他格式。
這是我在應用程序中使用的代碼的片段,使用以下代碼播放聲音:
int flip = 1,scratch = 2,wrong = 3,correct = 4,pop = 5;
SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;
setVolumeControlStream(AudioManager.STREAM_MUSIC);
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(flip, soundPool.load(this, R.raw.flip, 1));
soundPoolMap.put(scratch, soundPool.load(this, R.raw.scratch, 1));
soundPoolMap.put(wrong, soundPool.load(this, R.raw.wrong, 1));
soundPoolMap.put(correct, soundPool.load(this, R.raw.correct, 1));
soundPoolMap.put(pop, soundPool.load(this, R.raw.pop, 1));
soundPool.play(soundPoolMap.get(flip), 1, 1, 1, 0, 1);
編輯:幾乎完全忽略了您的問題的一部分。 您需要使用開關/案例范圍來確定單擊了哪個按鈕,並對其應用正確的聲音:
public void listen(View v) {
switch(v.getId()) {
case (R.id.button1):
soundPool.play(soundPoolMap.get(flip), 1, 1, 1, 0, 1);
break;
case (R.id.button2):
soundPool.play(soundPoolMap.get(scratch), 1, 1, 1, 0, 1);
break;
case (R.id.button3):
...
}
}
R.raw
像R.id
一樣,是指向這些值存儲位置的指針之類的基本單詞。
當您將某些圖像或wav文件保存在raw文件夾下時,在刷新項目后,您可以像R.raw.arthaswhat5
這樣調用它,它返回int
。
同樣,添加新的GUI元素時會生成R.id
R.raw
和R.id
之間沒有依賴關系。 R.raw
指向原始文件夾時R.id
指向您的視圖XML。
from `View` you can fetch id to you it for `if` statement or `switch`
喜歡
if (v.getId() == R.id.your_button){ /*...*/}
[編輯]
如果您有超過100首歌曲,我會使用assets
文件夾而不是raw
。 因為raw
名稱中的所有名稱都必須小寫,並且您不能在此處創建子目錄。 將很難處理和維護。
您為什么不使用這樣的switch-case語句?
public void listen(View v){
MediaPlayer mediaPlayer;
switch(v.getid()) {
case (R.id.sound1):
mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat5);
mediaPlayer.start();
break;
case (R.id.sound2):
mediaPlayer = MediaPlayer.create(this, R.raw.arthaswhat6);
mediaPlayer.start();
break;
case (R.id.sound3):
...
...
...
case (...)
...
...
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.