在ViewPager中使用PhotoView的异常

524 阅读1分钟
原文链接: www.jianshu.com

在 Android 中 PhotoView 是一个用于查看图片的库,支持多点触摸来放大缩小图片,应用很广泛。单独使用 PhotoView 时一般没什么问题,但是我们经常会有这样的需求,多张图片能够切换浏览查看,并且每张图片都要支持放大缩小,这就需要用到 ViewPager 来实现了,遗憾的是在某些机型中,多点触摸放大缩小时会出现这样的异常:

#10903 java.lang.IllegalArgumentException
pointerIndex out of range
android.view.MotionEvent.nativeGetAxisValue(Native Method)

解决方案如下,自定义一个 ViewPager ,捕获掉触摸时的异常:

public class PhotoViewPager extends ViewPager {

    public PhotoViewPager(Context context) {
        super(context);
    }

    public PhotoViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        try {
            return super.onTouchEvent(ev);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        try {
            return super.onInterceptTouchEvent(ev);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return false;
    }
}