我知道有很多线程实际上实现了缩放缩放 - 但我已经做到了这一点。
我正在使用SimpleScaleGestureListener来处理收缩。我已经设法确保你不能缩小距离比保持图像高度与屏幕尺寸相同(所以你的图像高度始终至少是可用屏幕尺寸的高度)。
但是,我正在寻找一种方法来自动检测图像是否在这些边界之外被平移。就像标准的android显示图像一样。因此,如果我放大并向上平移图像,然后缩小,我希望它能够检测到图像底部到达屏幕底部的时间,然后缩放的“枢轴”相应地调整,因此从不允许“空白“在图像本身之上或之下。任何人都可以帮助我吗?
供参考,这是我的onScale和onDraw方法:
public boolean onScale(ScaleGestureDetector detector){
float minScale = (float) ((float) SCREEN_SIZE.y / (float) DRAWABLE_SIZE.y);
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(minScale, Math.min(mScaleFactor, 5.0f));
invalidate();
return true;
}
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.drawColor(Color.DKGRAY);
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor, getDrawable().getIntrinsicWidth() / 2,
getDrawable().getIntrinsicHeight() / 2);
this.getDrawable().draw(canvas);
canvas.restore();
}
答案 0 :(得分:3)
您可以使用android.graphics.Matrix转换绘制的位图。 Matrix包含缩放和翻译。
您只需将矩阵应用于画布: canvas.setMatrix
您可以轻松计算所需矩形的适合屏幕:
Matrix.setRectToRect
其中source是你的图像(Bitmap)的真实分辨率矩形,左边/顶部为0,0,右下角为宽度/高度。 dst是目标视图的矩形,其中将绘制位图。
然后你也可以解决你的任务 - 知道你的图像的边界将被绘制。 Matrix.mapRect将计算位图的矩形(如前所述)将在屏幕的坐标中显示在屏幕上的位置。那么你可以简单地相对于屏幕的左侧绘制图像的左侧,相同的顶部/右侧/底部。
我不打算给你代码,只是暗示要走哪条路。 我最近使用捏缩放,适合屏幕,动画过渡等编码图像查看器,所有这些都是使用矩阵和操作完成的。
答案 1 :(得分:2)
一个简单的解决方案是使用此小部件
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/