我正在使用chris banes的photoview库来处理我的画廊的所有缩放事件。
我想检测图像是否已被放大或已被用户缩小而不会覆盖所有这些双击,并触摸事件方法。是否有一种有效的方法来实现此目的?
答案 0 :(得分:1)
回答我自己的问题: -
我找到了一种更好的方法来实现缩放检测,适用于缩放缩放以及双击(任何缩放事件,无需覆盖每种方法)。在网络上找不到缩放事件。如果有的话一个更有效的方式,请告诉我:))
(我也使用chris banes photoview库来处理缩放。)
因此,要检测缩放事件,请获取当前photoview的矩形,当缩放事件发生时,调用OnMatrixChangeListener并在那里比较矩形以查看。
(现在只使用这个侦听器处理缩放事件将无法工作,因为每次更改图像时都会调用侦听器(如果您在图库中使用它),它也会在调用时被调用屏幕方向改变,并且当屏幕进行简单的无缩放打算时也会改变。)
此外,当屏幕方向改变时,有时photoview返回一个0矩形,所以你必须检查它,这是我的代码: -
if (savedInstanceState.getBoolean(Constants.ZOOM)) {
photoViewAttacher = new PhotoViewAttacher(backgroundImage);
mWindowRect = new RectF(photoViewAttacher.getDisplayRect());
photoViewAttacher.setOnMatrixChangeListener(new PhotoViewAttacher.OnMatrixChangedListener() {
@Override
public void onMatrixChanged(RectF rect) {
//need to differentiate between screen orientation
if (mWindowRect.left == 0 && mWindowRect.top == 0 && mWindowRect.right == 0 && mWindowRect.bottom == 0) {
mWindowRect = new RectF(rect);
}
if (Math.abs(mWindowRect.left - rect.left) < 2 && Math.abs(mWindowRect.top - rect.top) < 2 && Math.abs(mWindowRect.right - rect.right) < 2 && Math.abs(mWindowRect.bottom - rect.bottom) < 2) {
viewPager.setLocked(false);
thumbnailsContainer.startAnimation(appear);
thumbnailsContainer.setClickable(true);
} else {
viewPager.setLocked(true);
thumbnailsContainer.startAnimation(disappear);
thumbnailsContainer.setClickable(false);
}
Log.i("ZOOM", "default rect: " + mWindowRect);
Log.i("ZOOM", "zoom rect: " + rect);
}
});
}
答案 1 :(得分:0)
当PhotoView
上的某个事件发生时,我可以看到一堆可以通知的听众。
参考:
IPhotoView
在这里,我可以看到听众:
void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener);
void setOnScaleChangeListener(PhotoViewAttacher.OnScaleChangeListener onScaleChangeListener);
void setOnSingleFlingListener(PhotoViewAttacher.OnSingleFlingListener onSingleFlingListener);
希望这有帮助。