我的问题很简单。我只想在按下按钮时播放循环声音。以下是开关语句,如果其他我尝试过的话。充其量,我可以播放声音,但是当按钮不再按下时,它不会停下来。

    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;
   }
有帮助吗?

解决方案

尝试返回 true 代替 false 在......的最后 onTouch.

现在可能发生的事情是您得到一个 ACTION_DOWN 事件开始您的声音。通过返回 false 你告诉框架你 没有 消耗动作,这意味着您也不会消耗未来的行动。因此,它将停止向您的视图发送触摸事件。

相关的报价来自 Android开发人员:

当您获得Action_Down事件时,您是否返回正确?如果没有,这可能是问题。该框架只会将未来的触摸事件(action_moves和action_up)传递给该视图,如果其触摸侦听器或OnTouchEvent返回true。

其他提示

将您的国会议员移到OnTouch处理程序外!

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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top