我的问题很简单。我只想在按下按钮时播放循环声音。以下是switch语句,如果我尝试了其他方法。充其量,我可以播放声音但不再按下按钮时不会暂停。
public boolean onTouch(View v, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_DOWN){
mp.setLooping(true);
mp.start();
}else if (v.getId() == R.id.clash && event.getAction() == MotionEvent.ACTION_UP)
{mp.pause();
}
}
public boolean onTouch(View v, MotionEvent event) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mp.setLooping(true);
mp.start();
case MotionEvent.ACTION_UP:
mp.pause();
}
return false;
}
答案 0 :(得分:1)
尝试在true
结束时返回false
而不是onTouch
。
现在发生的事情(可能)是你得到一个ACTION_DOWN
事件来启动你的声音。通过返回false
,您告诉框架您没有使用该操作,这意味着您不会消耗将来的操作。因此,它将停止向您的视图发送触摸事件。
android-developers的相关引用:
当您收到ACTION_DOWN事件时, 你回来了吗?如果没有,这个 可能是个问题。框架 只会提供未来的触摸事件 (ACTION_MOVEs和ACTION_UP)来 查看其触摸侦听器或 onTouchEvent返回true。
答案 1 :(得分:0)
将你的mp移到onTouch Handler外面!
MediaPlayer mp;
public boolean onTouch(View v, MotionEvent event) {
mp = MediaPlayer.create(getBaseContext(), R.raw.clash);
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mp.setLooping(true);
mp.start();
case MotionEvent.ACTION_UP:
mp.pause();
}