禁用Android滚动视图,但仍然允许在滚动视图中的按钮上点击
我希望能够防止用户能够在我的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); }
最后,我发现以下解决方案正是我所需要的:
@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);
}
如果禁用,您可以覆盖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);
}
您可能还想在禁用/启用时动态隐藏/显示滚动条。
链接地址: http://www.djcxy.com/p/91253.html上一篇: Disable Android scrollview, but still allow taps on buttons in the scroll view
下一篇: Handle a fling/scroll in Android without consuming the MotionEvent