我正在使用chris banes的photoview库处理我画廊的所有缩放事件。
我想检测图像是否已被用户放大或缩小,而不覆盖所有这些双击和触摸事件方法。是否有一种有效的方法来实现此目的?
最佳答案
要回答我自己的问题:
我发现了一种更好的实现缩放检测的方法,该方法适用于双指缩放和双击(任何缩放事件,而不必覆盖每种方法)。在网络上找不到它可以检测到缩放事件。有效的方法,请让我知道:)
(此外,我正在使用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);
}
});
}