如果按钮是ACTION_DOWN,是否可以强制按住1秒钟?

Jun*_*urg 10 android action button motion

按住当前按钮(ACTION_DOWN)以获得按下时的当前时间.当我释放按钮(ACTION_UP)时,也会拍摄当前时间,并按时间差剪切和粘贴音频文件.如果用户按下并释放按钮太快,则会生成无效的音频文件.所以我想实现无条件按压超过1秒的功能.

按钮ACTION_DOWN,ACTION_UP有没有办法在动作事件中实现这样的功能?如果你知道,请帮我个忙.以下是触摸侦听器的源代码.

recordBtn.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    long currentDuration = vAudioPlayer.getCurrentDuration();
                    // ?? ?? ( combineList ???? ??? ? )
                    if (mRecordThread != null) {
                        if (combineList.size() % 2 == 0) {
                            mRecordThread.startFileWrite(currentDuration);
                            combineList.add(currentDuration);
                        }
                    }
                }

                // ??, ??? ? ?????
                micBg1.setVisibility(View.VISIBLE);
                micBg2.setVisibility(View.VISIBLE);

                micBg1.startAnimation(animMic1);
                micBg2.startAnimation(animMic2);

                //userImg.setImageBitmap(userImgBitmap);
                userImg.startAnimation(animZoomIn);
                // artistImg.setImageBitmap(artistBlurImg);
                artistImg.startAnimation(animZoomOut);

                break;
                case MotionEvent.ACTION_UP: {
                    long currentDuration = vAudioPlayer.getCurrentDuration();
                    if (mRecordThread != null) {
                        // ??? ?? ( combineList? ??? ?: ??? ??? ??? ? combineList? ???? ??? ?? )
                        if (combineList.size() % 2 == 1) {
                            mRecordThread.stopFileWrite();

                            File waveFile = new File(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/")
                                    + "_" + calTime(combineList.get(combineList.size() - 1), false) + "_uv.pcm");

                            // ?? ??? ?? ?? ??? ???? wav ??? ??,
                            if (waveFile.exists()) {

                                copyWaveFile(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + calTime(combineList.get(combineList.size() - 1), false) + "_uv.pcm",
                                        RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + calTime(combineList.get(combineList.size() - 1), false) + "_u0.wav");

                                // wav ?? ?? ??
                                if (mMp3ConcatThread != null) {
                                    mMp3ConcatThread.startCombine(null, 3333333333333333333L, combineList.get(combineList.size() - 1), currentDuration);
                                }
                            }

                            combineList.add(currentDuration);
                            // startCombine Thread ?? ??( if old_position: 0, 3333333333333333333L, 7777777777777777777L, ? ? )
                            if (combineList.size() == 2) {
                                // 0: ?? ?? ??? ?
                                mMp3ConcatThread.startCombine(null, 0, combineList.get(combineList.size() - 2), currentDuration);
                            } else {
                                // ? ?: ?? ?? ??? ?
                                mMp3ConcatThread.startCombine(null, combineList.get(combineList.size() - 3), combineList.get(combineList.size() - 2), currentDuration);
                            }
                        }
                    }
                }

                // ??, ??? ? ?????
                micBg1.setVisibility(View.GONE);
                micBg2.setVisibility(View.GONE);

                micBg1.clearAnimation();
                micBg2.clearAnimation();

                // userImg.setImageBitmap(userBlurImg);
                userImg.startAnimation(animZoomOut);
                // artistImg.setImageBitmap(artistImgBitmap);
                artistImg.startAnimation(animZoomIn);
                break;
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

Sur*_*mar 3

您必须进行检查,如果操作向上和向下之间的差异小于 1 分钟,则将 UP 时间设置为停机时间 + 60 秒。这将解决您的问题。你必须把这个逻辑放在这里:

case MotionEvent.ACTION_UP: {
long currentDuration = vAudioPlayer.getCurrentDuration();
//your logic here
if (mRecordThread != null) {
Run Code Online (Sandbox Code Playgroud)