Масштаб матрицы просмотра изображений Android + перевод

Я пытаюсь вручную получить изображение внутри изображения, центрированное по размеру экрана. Мне нужно сделать это с помощью матрицы (позже я динамически изменю преобразование матрицы).

Проблема в том, что мне не удается выровнять изображение по центру вида (подходящий масштаб). Вот код:

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

Приведенный выше код работает, если я не центрирую масштаб по центру изображения (но мне нужно будет сделать это позже, поэтому мне нужно выяснить формулу сейчас).

Я подумал, что делаю следующее может исправить проблему, но изображение по-прежнему смещено (вниз и вправо). - изображение: 200x133 - дисплей: 800x480 - minScale: 2,4 - последний левый верхний угол изображения: 100, 67 (должно быть 17, 0)

30
задан Vincent Mimoun-Prat 20 May 2011 в 17:08
поделиться