множественная функция одним нажатием кнопки - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть кнопка. Мне нужны три функции, для которых при первом нажатии она начинает запись звука. При втором щелчке она останавливается при третьем щелчке. Она показывает три параметра (воспроизведение звука, запись нового, удаление звука). Как я могу это сделать?реализовать это действие help

 k=(Button)findViewById(R.id.button1);
    k.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Вам необходимо установить переменную уровня класса и определить, какой клик произошел.Сложность этого подхода заключается в определении момента сброса значения.

private int _clicks = 0;

k = (Button)findViewById(R.id.button1);
k.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        int count = ++_clicks;

        if(count == 1)
             //do whatever
        if(count == 2)
             //do whatever
        if(count == 3)
             //do whatever
    }
});

Лучшим подходом было бы просто назначить несколько обработчиков нескольким кнопкам и выполнить действие, необходимое для кнопки.Это позволит вам определить отношение 1: 1 и сделает ваш код намного более управляемым в будущем.

РЕДАКТИРОВАТЬ : для записи звука существует множество примеров в сети.

  public class AudioRecorder {

  final MediaRecorder recorder = new MediaRecorder();
  final String path;

  /**
   * Creates a new audio recording at the given path (relative to root of SD card).
   */
  public AudioRecorder(String path) {
    this.path = sanitizePath(path);
  }

  private String sanitizePath(String path) {
    if (!path.startsWith("/")) {
      path = "/" + path;
    }
    if (!path.contains(".")) {
      path += ".3gp";
    }
    return Environment.getExternalStorageDirectory().getAbsolutePath() + path;
  }

  /**
   * Starts a new recording.
   */
  public void start() throws IOException {
    String state = android.os.Environment.getExternalStorageState();
    if(!state.equals(android.os.Environment.MEDIA_MOUNTED))  {
        throw new IOException("SD Card is not mounted.  It is " + state + ".");
    }

    // make sure the directory we plan to store the recording in exists
    File directory = new File(path).getParentFile();
    if (!directory.exists() && !directory.mkdirs()) {
      throw new IOException("Path to file could not be created.");
    }

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(path);
    recorder.prepare();
    recorder.start();
  }

  /**
   * Stops a recording that has been previously started.
   */
  public void stop() throws IOException {
    recorder.stop();
    recorder.release();
  }

}
1 голос
/ 20 декабря 2011

Другой подход состоит в том, чтобы иметь три разных onClickListener.взгляните на этот код:

в вашем onCreate:

...
button.setOnClickListener(playListener);
...

создайте методы для play(), stop() и showOption() в любом месте вашей деятельности, и это:

    OnClickListener playListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            play();
            v.setOnClickListener(stopListener);
        }
    };

    OnClickListener stopListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            stop();
            v.setOnClickListener(showOptionListener);
        }
    };

    OnClickListener showOptionListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            showOption();
        }
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...