【问题标题】:Handle a fling/scroll in Android without consuming the MotionEvent在不消耗 MotionEvent 的情况下处理 Android 中的投掷/滚动
【发布时间】:2013-08-01 21:47:17
【问题描述】:

我的应用程序的屏幕一侧有一个 ViewFlipper,其中包含一堆不同的视图,我希望用户能够通过向左滑动来关闭它。所以我照常做...

private class SwipeDetector extends SimpleOnGestureListener {

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        //Dismiss view
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }
}

...然后设置ViewFlipper的onTouchListener调用SwipeDetector中的onTouchEvent。这一切都很好,但是我注意到因为它正在消耗所有进入 ViewFlipper 的触摸事件,当 ViewFlipper 本身时我无法单击任何东西。如果我不覆盖 onDown 或者我让它返回 false ,那么 TouchListener 会忽略事件的其余部分,我不会得到任何结果。如果我什至可以处理用户触摸 ViewFlipper 之后的所有 ACTION_MOVE 事件,但我什至无法做到这一点,我很乐意将某种自定义滑动检测组合在一起。有什么方法可以在不消耗 onDown 的情况下继续收听 MotionEvent?

【问题讨论】:

    标签: android swipe viewflipper


    【解决方案1】:

    对我有用的是扩展View.OnTouchListener 而不是SimpleGestureListener,并覆盖onTouch 方法。请将此 sn-p 作为一种非常简单(且可改进)的方法来进行水平滑动检测。-

    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                downX = event.getX();
                return true;
            }
            case MotionEvent.ACTION_UP: {
                upX = event.getX();
                float deltaX = downX - upX;
    
                if (Math.abs(deltaX) > MIN_DISTANCE) {
                    if (deltaX < 0) {
                        this.onLeftToRightSwipe();
                        return true;
                    }
                    if (deltaX > 0) {
                        this.onRightToLeftSwipe();
                        return true;
                    }
                    return true;
                }
    
                return true;
            }
        }
        return false;
    }
    

    【讨论】:

    • 这可以很好地处理触摸事件,但仍然存在与我原来的问题相同的问题 - 它消耗触摸事件,当我将其设置为父视图上的触摸侦听器时,我不能单击子视图中的任何内容,因为触摸事件没有那么远。
    • @CathalComerford 你找到什么了吗?
    【解决方案2】:

    您注意到 GestureDetector 了吗?它从 API 版本 1 开始可用。

    http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html

    处理手势和滚动手势。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 2015-12-26
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多