问题分析
这是ViewPager自身对于多点触控处理的bug,该bug可以追溯到Android4.4。该问题会导致应用崩溃。根本原因在于没有调用 super.onInterceptTouchEvent(); 造成 mActivePointerIdactivePointerIndex的值不能正确获取。导致父类 onTouchEvent取值错误,最终 onTouchEvent不能正确执行。
解决方案
覆写 ViewPager 的 onTouchEvent 与 onInterceptTouchEvent 方法,catch 该异常即可,如下所示:
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
try {
return super.onInterceptTouchEvent(event);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
try {
return super.onTouchEvent(event);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
或者在调用getX getY的位置添加异常捕获
try {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return (float) Math.sqrt(x * x + y * y);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}