在Android中按下按钮时播放循环声音
-
29-09-2019 - |
题
我的问题很简单。我只想在按下按钮时播放循环声音。以下是开关语句,如果其他我尝试过的话。充其量,我可以播放声音,但是当按钮不再按下时,它不会停下来。
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();
}
不隶属于 StackOverflow