使用矩阵从显示中心开始的图像比例

时间:2012-05-04 15:58:42

标签: android-imageview

每一个人。 我是一个Android开发人员。 我想用矩阵从图像显示部分的中心缩放图像。 所以,我用矩阵缩放了我的图像。然后用计算的指针移动它。 但是,应用程序无法正常工作。 这找不到正确的中心,所以当它移动时,它向右移动。 为什么会这样? 我找不到问题。

接着是代码。

            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? 谁可以解释一下? 请帮帮我。

1 个答案:

答案 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();
}

谢谢。每一个。