Android   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在ACTION_MOVE之后让我的视图停止听取触摸事件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个按钮,我按下按钮动画.我希望它在超出某个阈值之后快速恢复到“正常”状态.

我在ACTION_DOWN上创建了一个视图边界的矩形,并检查它是否在ACTION_MOVE的触摸区域之外.我成功地检测到了“越界”的触摸,但我无法让视图停止听触摸.这就像它忽略了我的animateToNormal()方法.

我已经尝试将布尔返回值更改为true而不是false,这没有帮助.我也尝试在ACTION_MOVE情况下删除触摸侦听器(设置为null),但我需要重新连接以继续听触摸.我想我可以在添加它之前添加一个任意延迟,但这似乎是一个可怕的黑客.

我正在4.2设备(LG G2)上进行测试.

private static class AnimationOnTouchListener implements View.onTouchListener {
        private Rect rect;

        @Override
        public Boolean onTouch(View view, MotionEvent motionEvent) {

            switch(motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    rect = new Rect(view.getLeft(), view.getTop(), view.getright(), view.getBottom());
                    animatePressed();
                    return false;

                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    // BACk to normal state
                    animateBACkToNormal();
                    return false;

                case MotionEvent.ACTION_MOVE:
                    if(!rect.contains(view.getLeft() + (int) motionEvent.getX(), view.getTop() + (int) motionEvent.getY())){
                        d(tag, "out of bounds");
                        animateBACkToNormal();
                        // STOP LISTENING TO MY TOUCH EVENTS!

                    } else {
                        d(tag, "in bounds");
                    }
                    return false;
                default:
                    return true;
            }
        }

解决方法:

为什么你只是不继续听,而是设置一个声明来忽略运动事件?

像这样的东西:

private static class AnimationOnTouchListener implements View.onTouchListener {
        private Rect rect;
        private Boolean ignore = false;

    @Override
    public Boolean onTouch(View view, MotionEvent motionEvent) {
        if(ignore && motionEvent.getAction()!=MotionEvent.ACTION_Up)
           return false;
        switch(motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                rect = new Rect(view.getLeft(), view.getTop(), view.getright(), view.getBottom());
                animatePressed();
                return false;

            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
                // BACk to normal state
                animateBACkToNormal();

                // IMPORTANT - touch down won't work if this isn't there.
                ignore = false;
                return false;

            case MotionEvent.ACTION_MOVE:
                if(!rect.contains(view.getLeft() + (int) motionEvent.getX(), view.getTop() + (int) motionEvent.getY())){
                    d(tag, "out of bounds");
                    animateBACkToNormal();
                    // STOP LISTENING TO MY TOUCH EVENTS!
                    ignore = true;
                } else {
                    d(tag, "in bounds");
                }
                return false;
            default:
                return true;
        }
    }

大佬总结

以上是大佬教程为你收集整理的android – 如何在ACTION_MOVE之后让我的视图停止听取触摸事件?全部内容,希望文章能够帮你解决android – 如何在ACTION_MOVE之后让我的视图停止听取触摸事件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: