Android中setOnTouchListener的MotionEvent.ACTION_UP突然不执行了

在项目中有一个触摸发送语音的功能,我使用了view的setOnTouchListener(),监听手指触摸的状态进行相应操作。

	mHoldToTalk.setOnTouchListener((v, event) -> {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                LogUtil.log("action_down");
                break;
            case MotionEvent.ACTION_MOVE:
                LogUtil.log("action_move");
                break;
            case MotionEvent.ACTION_UP:
                LogUtil.log("action_up");
                break;
            default:
                break;
        }
        return true;
    });

之前一直是好的,突然间MotionEvent.ACTION_UP不执行了,在网上查了许多资料,都说只要返回true就可以了,但我明明返回的是turn啊,而且也没有什么事件拦截之类的操作,折腾了好久发现其实不是所有的都手机有问题,就我使用的小米8有问题,它确实没有走MotionEvent.ACTION_UP,而是执行了MotionEvent.ACTION_CANCEL,找到问题就好办了,我们只需要将之前MotionEvent.ACTION_UP中的操作在MotionEvent.ACTION_CANCEL里面执行一遍就可以了。

	mHoldToTalk.setOnTouchListener((v, event) -> {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                LogUtil.log("action_down");
                AudioRecordManager.getInstance(getContextWithinHost()).startRecord();
                break;
            case MotionEvent.ACTION_MOVE:
                LogUtil.log("action_move");
                if (isCancelled(v, event)) {
                    AudioRecordManager.getInstance(getContextWithinHost()).willCancelRecord();
                } else {
                    AudioRecordManager.getInstance(getContextWithinHost()).continueRecord();
                }
                break;
            case MotionEvent.ACTION_UP:
                LogUtil.log("action_up");
            case MotionEvent.ACTION_CANCEL:
                LogUtil.log("action_cancel");
                AudioRecordManager.getInstance(getContextWithinHost()).stopRecord();
                AudioRecordManager.getInstance(getContextWithinHost()).destroyRecord();
                break;
            default:
                break;
        }
        return true;
    });

好了,完美解决我的问题,折腾了好久,在这里记录一下,希望能够帮到你。

你可能感兴趣的:(android)