但现在还存在一些问题:
1、缩放的中心点,我们设置是固定的,只在屏幕中间
2、放大后,无法移动图片
下面就解决这些问题
设置缩放中心
1、单纯的设置缩放中心
仅仅是设置中心很简单,直接在onScale中修改下中心点 :
mScaleMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusX()); setImageMatrix(mScaleMatrix);
但是,随意的中心点放大、缩小,会导致图片的位置的变化,最终导致,图片宽高大于屏幕时,图片与屏幕间出现白边;图片小于屏幕,但是不居中。
2、控制缩放时图片显示的范围
所以我们在缩放的时候需要手动控制下范围:
private void checkBorder() {
RectF rect = getMatrixRectF();
float deltaX = 0;
float deltaY = 0;
int width = getWidth();
int height = getHeight();
// 如果宽或高大于屏幕,则控制范围
if (rect.width() >= width) {
if (rect.left > 0) {
deltaX = -rect.left;
}
if (rect.right
deltaX = width - rect.right;
}
}
if (rect.height() >= height) {
if (rect.top > 0) {
deltaY = -rect.top;
}
if (rect.bottom
deltaY = height - rect.bottom;
}
}
// 如果宽或高小于屏幕,则让其居中
if (rect.width()
deltaX = width * 0.5f - rect.right + 0.5f * rect.width();
}
if (rect.height()
deltaY = height * 0.5f - rect.bottom + 0.5f * rect.height();
}
mScaleMatrix.postTranslate(deltaX, deltaY);
}
现在图片缩放的功能就实现了
源代码
参考:
http://blog.csdn.net/flash129/article/details/8234599
http://www.360doc.com/content/14/0610/21/16623487_385518125.shtml
http://www.cnblogs.com/pen-ink/archive/2013/06/05/3118289.html
http://blog.csdn.net/liguangzhenghi/article/details/8076121
http://blog.csdn.net/lmj623565791/article/details/39474553