首页 文章

禁用Android滚动视图,但仍允许点击滚动视图中的按钮

提问于
浏览
0

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

我已经将ScrollView类子类化了,并且已经摆弄了 onInterceptTouchEventonTouchEvent 方法,但可以't seem to get it quite right. The code below stops the scrolling, but seems to disable tap (but not all, like if you go up and down without any move it works, but if your finger moves slightly as you tap it doesn' t注册) . 我也刚刚移除了 onInterceptTouchEvent 几乎可以工作,但滚动视图仍然会在用户移开他们的手指时滚动 .

@Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        App.log("onInterceptTouchEvent, with action : " + ev.getAction());
        switch(ev.getAction())
        {
            case MotionEvent.ACTION_MOVE:
                return true;
        }
        return super.onInterceptTouchEvent(ev);

    }

    @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);
    }

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);
    }
    
  • 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);
    }
    

    您可能还希望在禁用/启用时动态隐藏/显示滚动条 .

相关问题