下面的代码是处理名为clash的按钮的ACTION_DOWN和ACTION_UP事件。这个想法是,一旦if/else确定onTouch事件是由冲突引起的,并且switch语句根据该动作确定要执行的操作。我不知道是否问题是switch语句没有返回true,并且可能与问题有关。当我添加一个返回时,eclipse说代码无法访问,我不明白。我的印象是,你不能没有休息地突破开关。问题if/else和switch语句
实际发生的事情是,第一个声音会循环播放,但是当释放按钮时代码从未检测到动作,所以声音永远播放。任何帮助,将不胜感激。
public boolean onTouch(View v, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
if (v.getId() == R.id.clash){
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mp.setLooping(true);
mp.start();
break;
case MotionEvent.ACTION_UP:
mp.pause();
break;
}
}
return true;
}
});
即使添加“返回true”后我仍然没有得到任何行动。在这种情况下,我甚至可以让代码播放声音,而不是采取行动,它什么也不做。 – Prmths 2010-10-13 19:51:42
我不确定这一点,但是不会在每次按OR释放时创建新的MediaPlayer对象吗?在这种情况下,你会在不同的MediaPlayer实例上调用'pause()'而不是调用'start()'? – kcoppock 2010-10-13 20:04:18
确实有意义。问题是,当我将mp的创建移动到处理ACTION_DOWN事件的逻辑部分时,没有任何反应。它根本不播放任何声音。我开始考虑彻底放弃MediaPlayer,因为每次播放声音时都必须创建并销毁对象。我做的每一个搜索都说你不能动态设置数据源。 – Prmths 2010-10-13 20:14:18