Я пишу приложение для Android (хотя я думаю, что это общий вопрос), и мне нужно отобразить большое изображение (в ImageView), которое можно прокручивать и масштабировать. Мне удалось заставить работать прокрутку, захватывая сенсорные события и выполняя матричные переводы, и сейчас я работаю над масштабированием.
Если я просто применяю масштабное преобразование к изображению, оно увеличивается в исходной точке, которая является верхним левым углом экрана. Я хотел бы увеличить в центре экрана.
Из того, что я прочитал, это означает, что мне нужно преобразование, чтобы сделать начало координат центром экрана. Я думаю, что требуется что-то вроде следующего - предположим, что центр экрана (5, 5) для простоты ...
-Translate by (-5, -5)<br>
-Scale by the zoom factor<br>
-Translate by (+5, +5)*zoomfactor
К сожалению, это, похоже, не работает - кажется, что зум куда-то идет, НО центр ... может кто-нибудь помочь мне здесь?
РЕДАКТИРОВАТЬ: Это код, который теперь работает
Matrix zoommatrix = new Matrix();
float[] centerpoint = {targetimageview.getWidth()/2.0f, targetimageview.getHeight()/2.0f};
zoommatrix.postScale(zoomfactor, zoomfactor, centerpoint[0], centerpoint[1]);
zoommatrix.preConcat(targetimageview.getImageMatrix());
targetimageview.setImageMatrix(zoommatrix);
targetimageview.invalidate();