我认为这个问题经常被问到,但我找不到适合我实施的解决方案。我使用 onScaleListener 和 onGestureListener 构建了一个自定义图像视图,可以缩放和平移包含的图像。缩放是通过矩阵缩放完成的。该函数看起来像:
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
scaleFactor *= scaleGestureDetector.getScaleFactor();
scaleFactor = Math.max(initScale, Math.min(scaleFactor, initScale + 3.0f));
matrix = getImageMatrix();
matrix.setScale(scaleFactor, scaleFactor);
matrix.getValues(values);
matrix.postTranslate(-values[Matrix.MTRANS_X] + Math.max(0, centerX - centerImageX),
-values[Matrix.MTRANS_Y] + Math.max(0, centerY - centerImageY));
setImageMatrix(matrix);
}
如果需要,需要使用postTranslate()来居中图像。为了完成这个,我需要滚动到(scrollTo(x,y))缩放手势的焦点保持在屏幕上的相同位置的位置。最后它应该看起来像在webview中缩放。
任何人都可以帮我这个吗?
当我使用时:答案 0 :(得分:1)
现在我找到了一个适合我的解决方案。在我的情况下,我必须使用缩放步骤而不是缩放因子。
scrollTo((int) (getScrollX() - x + (scaleGestureDetector.getScaleFactor() * x) ),
(int) (getScrollY() - y + (scaleGestureDetector.getScaleFactor() * y) ));
将x和y作为缩放图像上的触摸位置。