0

画像ビューをズームするとき、ピンチズーム中に画像が最小サイズよりも小さくなることを許可し、onScaleEndメソッドで最小サイズに復元します。しかし、私は問題に直面しています:

transformMatrix = new Matrix()ステートメントとコンストラクターの間に違いはありませんtransformMatrix = child.getImageMatrix()- 私がチェックしたところ、両方の代入は行列を返します: [1, 0, 0][0, 1, 0][0, 0, 1]... しかし、何らかの理由で同じように動作しません

画像がスケーリングされる場所は次のとおりです。

public boolean onScale(ScaleGestureDetector detector) {
        //update the current scale
        float oldScaleFactor = scaleFactor;
        scaleFactor *= detector.getScaleFactor();


        if(Math.abs(oldScaleFactor - scaleFactor) < 0.02 * scaleFactor){
            // don't update scale Factor if the event isn't being handled
            scaleFactor = oldScaleFactor; 
            return false; 
            // should prevent against changes from resting fingers in place
        }
        else{    
             float xDiff = initialFocalPoints[0] - currentFocalPoints[0];
             float yDiff = initialFocalPoints[1] - currentFocalPoints[1];

            transformMatrix.setScale(scaleFactor, scaleFactor,
                               currentFocalPoints[0], currentFocalPoints[1]);
            transformMatrix.postTranslate(xDiff, yDiff);

            child.setImageMatrix(transformMatrix);
            return true;
        }
    }

正しい最小値にサイズ変更する場所は次のとおりです。

@Override
public void onScaleEnd(ScaleGestureDetector detector){
        //making sure the zoom level is within the allowable bounds
        if(scaleFactor < ZOOM_LEVEL_5 || scaleFactor > 8.0f){
        scaleFactor = Math.max(ZOOM_LEVEL_5, Math.min(scaleFactor, 8.0f));
        float xDiff = initialFocalPoints[0] - currentFocalPoints[0];
        float yDiff = initialFocalPoints[1] - currentFocalPoints[1];

        transformMatrix.setScale(scaleFactor, scaleFactor,
                           currentFocalPoints[0], currentFocalPoints[1]);
        transformMatrix.postTranslate(xDiff, yDiff);


        child.setImageMatrix(transformMatrix);
    }
}

コンストラクターで設定するとすべてが正常に機能しますtransformMatrix = new Matrix()が、これは機能しませんtransformMatrix = child.getImageMatrix()- 画像が正しい最小サイズに戻りません... 何が起こっているのですか?

ヘルプ!

編集:コンストラクターとonScaleBegin

public ScaleListener(){
        super();
        transformMatrix = new Matrix();
        transformMatrix = child.getImageMatrix();
        inverseTransformMatrix = new Matrix();
        currentFocalPoints = new float[2];
}

@Override
    public boolean onScaleBegin(ScaleGestureDetector detector){

        float startX = detector.getFocusX() + getScrollX();
        float startY = detector.getFocusY() + getScrollY();

        initialFocalPoints = new float[]{startX, startY};

        if(transformMatrix.invert(inverseTransformMatrix))
            inverseTransformMatrix.mapPoints(currentFocalPoints, initialFocalPoints);

        return true;
    }
4

1 に答える 1

0

なぜこれが起こっているのかはまだわかりませんが、 を呼び出すことでこの問題を解決できましたtransformMatrix = new Matrix(child.getImageMatrix())。このようにして、子の imageView マトリックスのコピーが含まれ、変更することができます。

于 2013-10-04T14:39:49.743 に答える