2016-04-07 17 views
1

Hallo Ich versuche, mit diesem Code in meinem Imageview auf dem Bild auf einem bestimmten Punkt zu vergrößern:Zoom Bildansicht mit Matrix

private void calculateAndZoom() { 

    matrix.set(getImageMatrix()); 
    printMatrixValues(getImageMatrix()); 

    float startpointY = (start_y_rel/ template_y_rel) * getHeight() * scale; 
    float startpointX = (start_x_rel/template_x_rel)* getWidth() * scale; 

    PrintDevMessage.print("Width: " + getWidth() + " Height: " + getHeight()); 

    matrix.setScale(1,1,0,0); 
    matrix.postScale(scale, scale, startpointX, startpointY); 

    this.setScaleType(ImageView.ScaleType.MATRIX); 
    this.setImageMatrix(matrix); 

    printMatrixValues(getImageMatrix()); 
} 

start_y_rel und start_x_rel ist, Punkte in Bezug auf die template_y_rel und template_x_rel

Ich verwende matrix.setScale (1,1,0,0), um alle vorherigen Zooms zu entfernen und zur ersten Position zu wechseln.

Dieser Code funktioniert mit Skala 3, aber wenn ich eine andere Skala versuche, zoomt er auf die falsche Position.

Antwort

0

Ok so nach 3 Tagen der Kopf-Kratzen ich die Lösung gefunden:

private void calculateAndZoom() { 

    float cScale=getMatrixValue(getImageMatrix(),Matrix.MSCALE_X); 

    float newScale = ((float)1.0/cScale)*scale; 

    matrix.set(getImageMatrix()); 
    printMatrixValues(matrix); 

    float startpointY = ((start_y_rel/template_y_rel) * getHeight()); 
    float startpointX = ((start_x_rel/template_x_rel) * getWidth()); 

    PrintDevMessage.print("Width: " + getWidth() + " Height: " + getHeight()); 

    matrix.postScale(newScale, newScale, startpointX, startpointY); 

    this.setScaleType(ImageView.ScaleType.MATRIX); 
    this.setImageMatrix(matrix); 

    printMatrixValues(getImageMatrix()); 

} 

ich nicht für das Bild-Konto haben größer als der Bildschirm ist, und wenn sie in der Imageview die Skala geändert wird gesetzt. Also musste ich den Maßstab neu berechnen, den ich mit der alten Skala so wollte:

float newScale = ((float)1.0/cScale)*scale;