我希望能够阻止用户在我的Android ScrollView中滚动,但仍然会检测他们何时点击滚动视图中的按钮。
我已经对ScrollView类进行了子类化,并且一直在使用onInterceptTouchEvent
和onTouchEvent
方法,但似乎无法正确使用它。下面的代码停止滚动,但似乎禁用了点击(但不是全部,如果你上下移动它没有任何移动它的工作原理,但如果你的手指稍微移动,你点击它不会注册)。我也刚刚删除了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); }
答案 0 :(得分: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 :(得分: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);
}
您可能还希望在禁用/启用时动态隐藏/显示滚动条。