源码地址:https://github.com/chrisbanes/PhotoView/
PhotoView 图片初始化完成之后,单指不停的滑动图片,会发现图片出现放大
此BUG在首次单指滑动的情况下出现,仅仅修改首次单指滑动监听
现在项目已经不在考虑API <14,所以仅仅改动以下监听
在监听之前,判断是否是双指的,如果是双指,则添加OnTouch监听
如果是单指操作,则不监听操作
首次单指不做缩放监听,其余不变
if(ev.getPointerCount() > 1){
mDetector.onTouchEvent(ev);
isSingleTouch = true;
}else if(isSingleTouch){
mDetector.onTouchEvent(ev);
}
@TargetApi(8) public class FroyoGestureDetector extends EclairGestureDetector { protected final ScaleGestureDetector mDetector; private Boolean isSingleTouch = false; public FroyoGestureDetector(Context context) { super(context); ScaleGestureDetector.OnScaleGestureListener mScaleListener = new ScaleGestureDetector.OnScaleGestureListener() { @Override public boolean onScale(ScaleGestureDetector detector) { float scaleFactor = detector.getScaleFactor(); if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) return false; mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector detector) { // NO-OP } }; mDetector = new ScaleGestureDetector(context, mScaleListener); } @Override public boolean isScaling() { return mDetector.isInProgress(); } @Override public boolean onTouchEvent(MotionEvent ev) { try { if(ev.getPointerCount() > 1){ isSingleTouch = true; mDetector.onTouchEvent(ev); }else if(isSingleTouch){ mDetector.onTouchEvent(ev); } return super.onTouchEvent(ev); } catch (IllegalArgumentException e) { // Fix for support lib bug, happening when onDestroy is return true; } } }