[TOC]
图片缩放 https://github.com/chrisbanes/PhotoView
- 修改双击直接放到最大,取消二次双击
- 缩放异常处理
修改双击直接放到最大,取消二次双击
找到DefaultOnDoubleTapListener
@Override
public boolean onDoubleTap(MotionEvent ev) {
if (photoViewAttacher == null)
return false;
try {
float scale = photoViewAttacher.getScale();
float x = ev.getX();
float y = ev.getY();
//TODO 改动 双击直接放到最大
if (scale < photoViewAttacher.getMediumScale()) {
// photoViewAttacher.setScale(photoViewAttacher.getMediumScale(), x, y, true);
photoViewAttacher.setScale(photoViewAttacher.getMaximumScale(), x, y, true);
} else if (scale >= photoViewAttacher.getMediumScale() && scale < photoViewAttacher.getMaximumScale()) {
photoViewAttacher.setScale(photoViewAttacher.getMaximumScale(), x, y, true);
} else {
photoViewAttacher.setScale(photoViewAttacher.getMinimumScale(), x, y, true);
}
} catch (ArrayIndexOutOfBoundsException e) {
// Can sometimes happen when getX() and getY() is called
}
return true;
}
缩放异常处理
当使用viewpager的方式,缩放图片会出现
java.lang.IllegalArgumentException: pointerIndex out of range
这个时候需要自定义viewpager,处理onInterceptTouchEvent
public class HackyViewPager extends ViewPager {
private boolean isLocked;
public HackyViewPager(Context context) {
super(context);
isLocked = false;
}
public HackyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
isLocked = false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (!isLocked) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return !isLocked && super.onTouchEvent(event);
}
public void toggleLock() {
isLocked = !isLocked;
}
public void setLocked(boolean isLocked) {
this.isLocked = isLocked;
}
public boolean isLocked() {
return isLocked;
}
}