我希望我的ViewPager只在使用单个手指时滑动。所以我扩展了该类并实现了onInterceptTouchEvent,如下所示:
但是getPointerCount()始终返回“1”,无论屏幕上有多少点。当我重写onTouchEvent时,我可以得到正确的数字,但这样做会导致一个错误,完全阻止了分页器的工作(http://code.google.com/p/android/issues/detail?id=18990),当你将第一个手指从多点触摸中抬起时,它会抛出一个杀死应用程序的异常:java.lang.IllegalArgumentException: pointerIndex out of range 还有其他方法吗?
编辑:
指针计数问题仍然存在,但我能够解决在onTouchEvent中抛出的异常。 我在得到异常时正在执行以下操作:
问题在于当您将第一个手指从多点触控中抬起时,ViewPager的onTouchEvent最终处理ACTION_UP事件而没有先处理ACTION_DOWN事件。因此,我想出了这个解决方法,避免了异常并且当您放下第二个手指时会结束ViewPager的移动:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if(ev.getPointerCount() > 1)
{
return false;
}
return true;
}
但是getPointerCount()始终返回“1”,无论屏幕上有多少点。当我重写onTouchEvent时,我可以得到正确的数字,但这样做会导致一个错误,完全阻止了分页器的工作(http://code.google.com/p/android/issues/detail?id=18990),当你将第一个手指从多点触摸中抬起时,它会抛出一个杀死应用程序的异常:java.lang.IllegalArgumentException: pointerIndex out of range 还有其他方法吗?
编辑:
指针计数问题仍然存在,但我能够解决在onTouchEvent中抛出的异常。 我在得到异常时正在执行以下操作:
if(ev.getPointerCount() == 1)
{
return super.onTouchEvent(ev);
}
return false;
问题在于当您将第一个手指从多点触控中抬起时,ViewPager的onTouchEvent最终处理ACTION_UP事件而没有先处理ACTION_DOWN事件。因此,我想出了这个解决方法,避免了异常并且当您放下第二个手指时会结束ViewPager的移动:
private boolean moving = false;
@Override
public boolean onTouchEvent (MotionEvent ev)
{
int action = ev.getAction();
if(action == MotionEvent.ACTION_DOWN)
{
moving = true;
}
if(ev.getPointerCount() == 1)
{
if(moving)
{
return super.onTouchEvent(ev);
}
if(action == MotionEvent.ACTION_UP)
{
moving = false;
}
}
else if(ev.getPointerCount() > 1 && moving)
{
ev.setAction(MotionEvent.ACTION_UP);
moving = false;
return super.onTouchEvent(ev);
}
return false;
}