Escala de matriz de vista de imagen de Android + traducir

Estoy tratando de obtener manualmente una imagen dentro de una vista de imagen centrada y ajustada a la pantalla. Necesito hacerlo con una matriz (luego cambiaré dinámicamente la transformación de la matriz).

Problema es que no puedo centrar la imagen en la vista (la escala es adecuada). Aquí está el código:

// Compute the scale to choose (this works)
float scaleX = (float) displayWidth / (float) imageWidth;
float scaleY = (float) displayHeight / (float) imageHeight;
float minScale = Math.min(scaleX, scaleY);

// tx, ty should be the translation to take the image back to the screen center
float tx = Math.max(0, 
        0.5f * ((float) displayWidth - (minScale * imageWidth)));
float ty = Math.max(0, 
        0.5f * ((float) displayHeight - (minScale * imageHeight)));

// Compute the matrix
Matrix m = new Matrix();
m.reset();

// Middle of the image should be the scale pivot
m.postScale(minScale, imageWidth/2, imageHeight/2);

// Translate
m.postTranslate(tx, ty);

imageView.setImageMatrix(m);

El código anterior funciona si no centro la escala en el centro de la imagen (pero tendré que hacerlo más tarde, así que necesito averiguar la fórmula ahora

Pensé que hacer lo siguiente corregiría el problema, pero la imagen todavía está desplazada (hacia abajo y a la derecha).

tx += 0.5*imageWidth*minScale;
ty += 0.5*imageHeight*minScale;

Algunos valores que tengo: - imagen: 200x133 - pantalla: 800x480 - minScale: 2.4 - esquina superior izquierda final de la imagen: 100, 67 (debe ser 17, 0)

Respuestas a la pregunta(4)

Su respuesta a la pregunta