1

我希望能够阻止用户在我的 Android ScrollView 中滚动,但仍然检测他们何时点击滚动视图中的按钮。

我已经对 ScrollView 类进行了子类化,并且一直在摆弄onInterceptTouchEventandonTouchEvent方法,但似乎无法完全正确。下面的代码停止滚动,但似乎禁用了点击(但不是全部,就像如果你没有任何移动就上下移动它可以工作,但如果你的手指在你点击时轻微移动它不会注册)。我也刚刚删除了onInterceptTouchEvent几乎可以工作的,但是当用户移开手指时,滚动视图仍然滚动。

    @覆盖
    公共布尔 onInterceptTouchEvent(MotionEvent ev)
    {
        App.log("onInterceptTouchEvent, with action : " + ev.getAction());
        开关(ev.getAction())
        {
            案例 MotionEvent.ACTION_MOVE:
                返回真;
        }
        返回 super.onInterceptTouchEvent(ev);

    }

    @覆盖
    公共布尔 onTouchEvent(MotionEvent ev)
    {
        App.log("onTouchEvent, 带有动作:" + ev.getAction());
        开关(ev.getAction())
        {
            案例 MotionEvent.ACTION_MOVE:
                返回假;
        }
        返回 super.onTouchEvent(ev);
    }

4

2 回答 2

2

最后,我发现以下解决方案正是我所需要的:

@Override
public boolean onTouchEvent(MotionEvent ev)
{
    App.log("onTouchEvent, with action : " + ev.getAction());
    switch(ev.getAction())
    {
        case MotionEvent.ACTION_MOVE:
            return false;
    }
    return super.onTouchEvent(ev);
}
于 2013-11-07T12:23:07.327 回答
1

如果禁用,您可以覆盖overscrollBy()并将 deltaX 和 deltaY 值更改为 0。

@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
    final int dx;
    final int dy;

    if (isEnabled())
    {
        dx = deltaX;
        dy = deltaY;
    }
    else
    {
        dx = 0;
        dy = 0;
    }

    return super.overScrollBy(dx, dy, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}

您可能还想在禁用/启用时动态隐藏/显示滚动条。

于 2013-10-31T07:55:20.423 回答