假设我们使用一个if语句来说明将事件值发送到事件侦听器的十种可能的按钮按下:
public boolean onTouch(int v) { //this is my only listener for all ten buttons
if(event.getAction() == MotionEvent.ACTION_DOWN){
if(v==button_one){pool.play(bass1, 1f,1f, 1, 0, 1f);}
if(v==button_two){pool.play(bass2, 1f,1f, 1, 0, 1f);}
if(v==button_three){pool.play(bass3, 1f,1f, 1, 0, 1f);}
if(v==button_four){pool.play(snare1, 1f,1f, 1, 0, 1f);}
if(v==button_five){pool.play(snare2, 1f,1f, 1, 0, 1f);}
if(v==button_six){pool.play(snare3, 1f,1f, 1, 0, 1f);}
if(v==button_seven){pool.play(hh1, 1f,1f, 1, 0, 1f);}
if(v==button_eight){pool.play(hh2, 1f,1f, 1, 0, 1f);}
}
return false;
}
将它们分类会更有效吗?说...一个小军鼓的onClick事件,一个低音和一个高音帽,这样一来,当按下一个按钮时,程序不必对每个if语句进行计数,只有被触发的监听器中的一个事件?
最佳答案
那这样的东西呢?
HashMap<int,int> soundMap = new HashMap<int,int>();
soundMap.put(button_one, bass1);
soundMap.put(button_two, bass2);
soundMap.put(button_three, bass3);
soundMap.put(button_four, snare1);
soundMap.put(button_five, snare2);
soundMap.put(button_six, snare3);
soundMap.put(button_seven, hh1);
soundMap.put(button_eight, hh2);
将HashMap作为类变量,并使用onCreate或其他方式初始化映射。然后,您可以将其用于您的监听器:
public boolean onTouch(int v) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
pool.play(soundMap.get(v), 1f, 1f, 1, 0, 1f);
}
return false;
}
这样做的好处是,如果将来必须添加更多按钮,则只需使用新的声音映射修改映射初始化方法即可;侦听器将不需要任何更改。