Воспроизведение зацикляющего звука, когда кнопка нажимает в Android

StackOverflow https://stackoverflow.com/questions/3918810

  •  29-09-2019
  •  | 
  •  

Вопрос

Моя проблема простая. Я хочу воспроизводить зацикливающий звук только тогда, когда нажата кнопка. Ниже приведены оператор 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;
   }
Это было полезно?

Решение

Попробуйте вернуться true вместо false в конце onTouch.

Что (вероятно) происходит прямо сейчас, так это то, что вы получаете ACTION_DOWN событие, которое начинает ваш звук. Вернувшись false Вы говорите структуру, что вы не Потребляйте действие, которое требуется, чтобы означать, что вы также не будете потреблять будущие действия. Таким образом, это перестанет отправлять события прикосновения к вашему мнению.

Соответствующая цитата от Android-Developers:

Когда вы получите событие Action_down, вы возвращаетесь в True? Если нет, то это, вероятно, проблема. Структура доставит только будущие события Touch (action_moves и Action_up) в эту точку зрения, если его Touch Slieder или 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