Как воспроизвести и остановить звук одной кнопкой с помощью Soundpool

Я здесь новенький и в java вроде как новенький. Все мои знания о коде основаны на том, что я могу найти в Интернете для своего проекта. Так что, с одной стороны, я знаю некоторые сложные вещи, с другой стороны, я не знаю простых вещей. Сейчас я застрял в этой ситуации.

У меня есть кнопка с зацикленным звуком, что я пытаюсь сделать, это когда я нажимаю кнопку, она должна менять изображение на «button_prees», когда я отпускаю кнопку, она должна воспроизводить звук и менять изображение на «button_on». Так что на этот момент код ниже работает нормально, но теперь я пытаюсь сделать обратную последовательность. Вы касаетесь той же кнопки, и она меняет изображение на "button_prees2", затем, когда вы отпускаете кнопку, она должна перестать воспроизводить звук и изменить изображение на "button_off"

Как реализовать это в коде ниже?

final Button b1 = (Button) findViewById(R.id.button1);
        b1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN:


                       b1.setBackgroundResource(R.drawable.button_prees);

                        break;

                    case MotionEvent.ACTION_MOVE:

                        break;

                    case MotionEvent.ACTION_UP:


                        myS.play(s1I, 1, 1, 1, -1, 1);

                        b1.setBackgroundResource(R.drawable.button_on);

                        break;
                }
                return true;
            }
        });

person Maxim Cedaroff    schedule 07.05.2017    source источник


Ответы (1)


Вы можете использовать логическое значение в качестве флага для состояния кнопки. Очень кратко и по существу:

boolean soundsOn = false;
public void setSoundsOn(boolean soundsOn){
    this.soundsOn = soundsOn;
}

public boolean isSoundsOn(){
    return soundsOn;
}
...

// Then for your Button listener:
onTouch(...)
if (!isSoundsOn){
  // Your above above code to change resources, start playing
  // EXCEPT 
  case MotionEvent.ACTION_UP: 
  ...
  setSoundsOn(true);
  ...
}else{
  // Code to stop etc.
  // INCLUDING 
  case MotionEvent.ACTION_UP: 
  ...
  setSoundsOn(false);
  ...
}
...

В идеале вы должны убедиться, что звук успешно запущен/остановлен, прежде чем вызывать setSoundsOn(...), иначе ваши метки могут в конечном итоге сказать, что это не так. Надеюсь это поможет...

person OffGridAndy    schedule 07.05.2017