Я пишу приложение для Android (хотя я думаю, что это общий вопрос), и мне нужно отобразить большое изображение (в ImageView), которое можно прокручивать и масштабировать. Мне удалось заставить прокрутку работать, фиксируя события касания и выполняя матричные преобразования, и теперь я работаю над масштабированием.
Если я просто применяю преобразование масштаба к изображению, оно увеличивается в начале координат, то есть в верхнем левом углу экрана. Я хотел бы увеличить масштаб в центре экрана. Из того, что я прочитал, это означает, что мне нужно преобразование, чтобы сделать начало координат центром экрана. Я думаю, что требуется что-то вроде следующего: предположим, что центр экрана равен (5, 5) для простоты...
-Translate by (-5, -5)
-Scale by the zoom factor
-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();