Кнопка Android onLongClick, как получить прослушиватель при отпускании кнопки при длительном нажатии [дубликат]

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

Вопрос

я следую этот урок реализовать рекордер в Android, который содержит приведенный ниже код: при удерживании кнопки начинается запись, при отпускании прекращается запись, но я не могу найти прослушиватель при отпускании кнопки, какой-нибудь совет?заранее спасибо

button.setOnLongClickListener(new View.OnLongClickListener() {          
        @Override
        public boolean onLongClick(View arg0) {
            startRecording();
            return false;
        }           
    });

private void startRecording() {
    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setOutputFile(voiceFileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {
        mRecorder.prepare();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
    }
    mRecorder.start();
}

private void stopRecording() {
    mRecorder.stop();
    mRecorder.release();
    mRecorder = null;
}
Это было полезно?

Решение

Вам не следует реализовывать longclicklistener, вам следует реализовать OnTouchListener.

Там у вас будет событие касания, и сделайте следующее:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){

            stopRecording();
            return true;
        }else{
            startRecording();
            return true;
        }
        return false;
    }
});

Другие советы

логическое значение «start» управляет этим

 private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }

а потом

 class RecordButton extends Button {
        boolean mStartRecording = true;

        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
                onRecord(mStartRecording);
                if (mStartRecording) {
                    setText("Stop recording");
                } else {
                    setText("Start recording");
                }
                mStartRecording = !mStartRecording;
            }
        };

контролирует это

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top