接着是代码。
的
的 matrix.reset();
curScale += 0.02f;
orgImage.getHeight();
w = orgImage.getWidth();
matrix.postScale(curScale, curScale);
rtnBitmap = Bitmap.createBitmap(orgImage, 0, 0, w, h, matrix, true);
curImageView.setImageBitmap(rtnBitmap);
Matrix curZoomOutMatrix = new Matrix();
pointerx =(int ) ((mDisplayWidth/2 - curPosX) * curScale);
curPosX = - pointerx;
pointery =(int ) ((mDisplayWidth/2 - curPosY) * curScale);
curPosY = - pointery;
Log.i("ZoomOut-> posX = ", Integer.toString(curPosX));
Log.i("ZoomOut-> posY = ", Integer.toString(curPosY));
curZoomOutMatrix.postTranslate(curPosX, curPosY);
curImageView.setImageMatrix(curZoomOutMatrix);
curImageView.invalidate();
的
您是否有任何示例代码用于中心zoomIn和zoomOut带有矩阵的imageView? 谁可以解释一下? 请帮帮我。
答案 0 :(得分:2)
或者,这是我的错。
首先,我从原始图像缩放图像。
所以,图像是(宽度,高度)*比例;
然后我计算显示中心的点的绝对位置。然后,将我的ImageView移动到视图所在的计算位置。我的错是在这里。
当我计算视图位置时,我从现在的比例改变位置。
因此,当它缩放时,位置不是<original position> * <now scale>
。那是<original position * <scale> * <now scale>
,结果是奇怪的位置。
所以我重新添加以从原始位置计算中心位置。
现在正在关注该模式。
public void calculate(float offset) {
float tmpScale = curScale - offset;
float orgWidth = (mDisplayWidth / 2 - curPosX) / tmpScale;
float orgHeight = (mDisplayHeight / 2 - curPosY) / tmpScale;
int tmpPosX = (int)(mDisplayWidth / 2 - orgWidth * curScale);
int tmpPosY = (int)(mDisplayHeight / 2 - orgHeight * curScale);
curPosX = tmpPosX;
curPosY = tmpPosY;
Matrix matrix = new Matrix();
matrix.postTranslate(tmpPosX, tmpPosY);
curImageView.setImageMatrix(matrix);
curImageView.invalidate();
}
谢谢。每一个。