在 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;
}
}