ViewPager缩放报错及解决

当我们使用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;
    }
}  
    原文作者:逐鹿者不见山
    原文地址: https://www.jianshu.com/p/15f45b0d1988
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞