1

みんな。私はアンドロイド開発者です。画像の表示部分の中心から画像をマトリックスで拡大縮小したい。そこで、マトリックスで画像をスケーリングしました。そして、計算されたポインターで移動しました。しかし、アプリケーションが正しく動作しません。これは正しい中心を見つけることができないため、見つかった場合は右に移動します。これはなぜですか?問題が見つかりません。

コードが続きました。

            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();

マトリックスを使用してimageViewを中央にズームインおよびズームアウトするためのサンプルコードはありましたか? 誰がそれを説明できますか?私を助けてください。

4

1 に答える 1

2

または、それは私のせいです。まず、元の画像から画像を拡大縮小します。したがって、画像は(幅、高さ)*スケールです。次に、中心に表示されている点の絶対位置を計算します。次に、ビューがある計算された位置に ImageView を移動します。私のせいはここにあります。ビューの位置を計算するとき、現在のスケールから位置を変更します。したがって、スケーリングしたときの位置は ではありません<original position> * <now scale>。でし<original position * <scale> * <now scale>た、結果は変な位置でした。そのため、元の位置から中心位置を計算するために add を作り直しました。

そのモードは現在次のとおりです。

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

ありがとうございました。みんな。

于 2012-05-06T05:32:21.760 に答える