从MotionEvent中的unScrollable视图中检测滚动

时间:2015-01-19 13:19:32

标签: android scroll motionevent

我正在使用ScrollView,它有一个滚动触发器,处于不可滚动状态,我想检测可能的滚动,但不是滚动视图我想用其他值来做这个值。

@Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (!mScrollable) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    y = event.getY();

                case MotionEvent.ACTION_UP:
                    y = event.getY();

                case MotionEvent.ACTION_MOVE:
                    double newY = event.getY();
                    double difY = y - newY;
                    mCallbacks.onScrollChanged((int) difY, false, false);
                    y = newY;

            }
            return false;
        } else return super.onInterceptTouchEvent(event);
    }

如果情况返回true,则此代码返回difY为0,而根本不调用ACTION_MOVE。

1 个答案:

答案 0 :(得分:1)

onInterceptTouchEvent用于告诉Android Framework您的View对当前正在发生的触摸事件感兴趣,并希望继续接收有关它的更新,直到它结束。

要实际处理触摸,您应该覆盖onTouchEvent,这是在取消触摸或ACTION_UP之前一直接受触摸的回调。

快速/肮脏的解决方法是始终在true上返回onInterceptTouchEvent并将当前代码移至onTouchEvent。这种方式的好处在于它很容易做到,缺点是它会阻止你的所有视图parentView接收触摸事件。

正确的方法是在视图检测到onInterceptTouchEvent之后返回true difY != 0,然后在onTouchEvent期间继续处理