Dyn*_*nde 5 java android zoom pinch
我知道有很多线程实际上实现了捏缩放 - 但我已经做到了这一点.
我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 android.graphics.Matrix 来转换绘制的 Bitmap。矩阵同时包含比例和平移。
您只需将矩阵应用到画布:canvas.setMatrix
您可以轻松计算所需矩形的适合屏幕:
Matrix.setRectToRect
Run Code Online (Sandbox Code Playgroud)
其中 source 是图像(位图)的实际分辨率矩形,左/上为 0,0,右下为宽/高。dst 是目标视图的矩形,将在其中绘制位图。
然后你还可以解决你的任务 - 知道图像的边界将在哪里绘制。Matrix.mapRect 将计算位图的矩形(如前所述)将在屏幕坐标中出现在屏幕上的位置。然后,您可以简单地相对于屏幕左侧绘制图像的左侧,对于顶部/右侧/底部也是如此。
我不会给你代码,只是提示你该走哪条路。我最近编写了具有捏缩放、适合屏幕、动画过渡等功能的图像查看器,所有这些都是使用 Matrix 及其操作完成的。
| 归档时间: |
|
| 查看次数: |
4088 次 |
| 最近记录: |