【问题标题】:Android button onLongClick, how to get the listener when the button is released from a long click [duplicate]Android按钮onLongClick,长按释放按钮时如何获取监听器[重复]
【发布时间】:2014-01-10 15:12:36
【问题描述】:

我正在关注this tutorial在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;
}

【问题讨论】:

  • this线程
  • 谢谢,我应该使用 setOnTouchListener 而不是 setOnClickListener 来检测按钮的运动

标签: android button record onlongclicklistener


【解决方案1】:

你不应该实现 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;
    }
});

【讨论】:

  • 小修正,这里的“return false”是不可达的,所以会抛出编译错误。
【解决方案2】:

布尔值“开始”控制它

 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;
            }
        };

控制它

【讨论】:

  • 谢谢,上面的逻辑是正确的,但是我想检测一下长按是否有效,使用setOnTouchListener。
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 2012-07-31
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多