2016-12-21 2 views
0

Ich habe eine Anforderung mit geringfügigen Änderungen. Diese post behält den Zoom bei der Orientierungsänderung bei und zentriert ihn. Ich möchte nicht, dass das Bild zentriert wird. Ich möchte nur, dass der Zoom beibehalten wird. Wie kann dies erreicht werden? Jede Hilfe wird sehr geschätzt.Zoomen in Fotoansicht ohne Center Aligning beibehalten

Antwort

0

Ich erreichte das gewünschte Verhalten nach so viel Brainstorming. Idee ist, die vorherige Matrix- und Zoomskala des Bildes zu speichern und dann die vorher gespeicherte Matrix auf dem Bild aufzufüllen. Fetching die vorherigen Werte:

Matrix previousImageMatrix = photoView.getDisplayMatrix(); 
previousImageMatrix.getValues(previousValues); 
previousZoomLevel = prescription.getScale(); 

Jetzt befestigen photoView.getViewTreeObserver().addOnPreDrawListener(this); Füllen Sie die obige Matrix, wenn die Bild onPreDraw() Methode wie folgt gezoomt wird:

@Override 
public boolean onPreDraw() 
{ 
    photoView.getViewTreeObserver().removeOnPreDrawListener(this); 
    Matrix theMatrix = photoView.getDisplayMatrix(); 
    Log.d("***", "onPreDraw: TransX = " + previousValues[2] + "TransY = " + previousValues[5]); 
    float[] matrixValues = new float[9]; 
    matrixValues[0] = previousZoomLevel; // 0 and 4 store the scaleX and scaleY 
    matrixValues[4] = previousZoomLevel; 
    if (previousZoomLevel == MIN_ZOOM_LEVEL) // Zoom Level starts from 1.0 to 16.0 
    { 
     matrixValues[2] = 0; //2 and 5 store store TransX and TransY 
     matrixValues[5] = 0; 
    } else 
    { 
     matrixValues[2] = previousValues[2]; 
     matrixValues[5] = previousValues[5]; 
    } 

    Log.d("***", "onPreDraw: NEW.. TransX = " + matrixValues[2] + "TransY = " + matrixValues[5]); 
    matrixValues[8] = 1.0f; 
    theMatrix.setValues(matrixValues); 
    prescription.setDisplayMatrix(theMatrix); 

    Matrix theImageViewMatrix = photoView.getDisplayMatrix(); 
    prescription.setImageMatrix(theImageViewMatrix); 
    return true; 
} 

hoffe, das hilft jemand.