当我们使用ViewPager的缩放时,有时会报出java.lang.IllegalArgumentException: pointerIndex out of range的错误。
这个bug是android系统原因导致的,在做多点触控放大缩小,操作的图片如果是自己所绘制的图形时就会偶尔发生这个异常,如果操作的是本身自带的图片的放大缩小多点触控就不会出现这个错误,要解决这问题有两种方法:
第一种方式:
修改frameworks\base\core\jni\android_view_MotionEvent.cpp的android_view_MotionEvent_nativeGetAxisValue方法
注释掉
[java]
if (!validatePointerIndex(env, pointerIndex, pointerCount)) {return 0;}
改完后需重新编译整个系统,然后替换lib库,重新编译整个系统一般需要半个多小时,这个方法就比较麻烦了
第二种方式:
自己重写ViewPager中的onTouchEvent和onInterceptTouchEvent两个方法,方法里面捕获下异常:
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
return super.onTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
}