当前位置: 首页 > 面试题库 >

如何区分猛烈和触碰?

印瑾瑜
2023-03-14
问题内容

我在ViewFlipper内有一个ListView,当用户在屏幕上滑动时会翻转它。单击ListView将打开浏览器。有时在我刷卡时,它被检测为对ListView的触摸,并会打开浏览器。这可能很烦人。如何防止这种情况发生?

class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    viewFlipper.setInAnimation(slideLeftIn);
                    viewFlipper.setOutAnimation(slideLeftOut);
                    viewFlipper.showNext();
                } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    viewFlipper.setInAnimation(slideRightIn);
                    viewFlipper.setOutAnimation(slideRightOut);
                    viewFlipper.showPrevious();
                }

                if (viewFlipper.getDisplayedChild() == 0) {
                    // TODO: light up left
                    flipperPosition = 0;
                } else if (viewFlipper.getDisplayedChild() == 1) {
                    // TODO: light up middle
                    flipperPosition = 1;
                } else if (viewFlipper.getDisplayedChild() == 2) {
                    // TODO: light up right
                    flipperPosition = 2;
                }
            } catch (Exception e) {
                System.out.println(e);
            }
            return false;
        }
    }

protected MotionEvent downStart = null;

        public boolean onInterceptTouchEvent(Mothtml" target="_blank">ionEvent event) {

            switch(event.getAction()) {  
            case MotionEvent.ACTION_DOWN:  
                // keep track of the starting down-event  
                downStart = MotionEvent.obtain(event);  
                break;  
            case MotionEvent.ACTION_MOVE:  
                // if moved horizontally more than slop*2, capture the event for ourselves  
                float deltaX = event.getX() - downStart.getX();  
                if(Math.abs(deltaX) > ViewConfiguration.getTouchSlop() * 2)  
                    return true;  
                break;  
            }

            // otherwise let the event slip through to children  
            return false;  
        }

问题答案:

通常通过父视图的onInterceptTouchEvent方法来完成此操作。onInterceptTouchEvent有机会在视图的子项之前看到任何触摸事件。如果onInterceptTouchEvent返回true,则以前处理触摸事件的子视图会收到一个ACTION_CANCEL,然后从该点开始的事件将发送到父级的onTouchEvent方法中进行常规处理。当false事件沿视图层次结构到达其通常的目标时,它也可以返回并监视事件。

您基本上想onInterceptTouchEvent在检测到猛击的父视图中执行此操作:

  • 在上ACTION_DOWN,记录触摸的位置。返回false
  • 在上ACTION_MOVE,检查初始触地位置和当前位置之间的差异。如果超过某个阈值,则(框架将使用ViewConfiguration#getScaledTouchSlop()或其他适当的值ViewConfiguration用于此类事情)return true
  • 根据常规检测和处理逃跑onTouchEvent

拦截后,ListView将会取消其触摸处理,并且您的列表项上也不会收到不需要的点击事件。ListView还设置为,一旦用户开始垂直滚动列表,就禁止其父项拦截事件,这意味着如果用户草率地垂直拖动列表,您就不会出现错误的水平翻转。

这就是股票Android Launcher或News and Weather这样的事情如何进行滚动/可敲击内容的并排翻页。



 类似资料:
  • 本文向大家介绍如何区分 HTML 和 HTML5?相关面试题,主要包含被问及如何区分 HTML 和 HTML5?时的应答技巧和注意事项,需要的朋友参考一下 1)在文档类型声明上不同: HTML是很长的一段代码,很难记住,而HTML5却只有简简单单的声明,方便记忆。 2)在结构语义上不同: HTML:没有体现结构语义化的标签,通常都是这样来命名的 ,这样表示网站的头部。 HTML5:在语义上却有很大

  • 本文向大家介绍python 如何区分return和yield,包括了python 如何区分return和yield的使用技巧和注意事项,需要的朋友参考一下 一、说明 return一直中,每中语言中其没没有很大差别,就不多说了。(shell语言return的是退出状态,可能差别是比较大的,感兴趣可参见“Linux Shell函数定义与调用”) 最早看到yield应该是哪们语言用来调整什么线程优先级的

  • 问题内容: 我希望根据我的构建触发方式向我的Jenkinsfile添加一个条件阶段。目前,我们的设置是通过以下方式触发的: 分支索引中获取的git repo更改 用户使用用户界面中的“立即构建”按钮手动触发构建。 有什么方法可以运行不同的流水线步骤,具体取决于其中哪些操作触发了构建? 问题答案: 以下代码可以确定用户是否已启动管道或计时器/其他触发器:

  • 求一个nginx如何区分PC和H5和APP的标准配置~~~

  • 最有力的色彩组合是充满刺激的快感和支配的 欲念,但总离不开红色;不管颜色是怎么组合,红 色绝对是少不了的。红色是最终力量来源——强烈、大胆、极端。 力量的色彩组合象征人类最激烈的感情:爱、恨、 情、仇,表现情感的充分发泄。 在广告和展示的时候,有力色彩组合是用来传 达活力、醒目等强烈的讯息,并且总能吸引众人的 目光。 补色色彩组合 原色色彩组合 单色色彩组合 55 7 52 4 68 36 4 7

  • 我有一个类型的参数