Использование setScale и setTranslate (Matrix) - PullRequest
8 голосов
/ 19 марта 2011

В моем приложении для Android у меня есть изображение, которое загружается. С этим изображением пользователь может увеличивать, уменьшать и перемещать его вперед и назад. В настоящее время я могу заставить работать только одного.

После многих испытаний я определил, что все, что я называю секундой, - это то, что работает.

matrix.setScale(zoom, zoom); // this will not work
matrix.setTranslate(currentX, currentY); // this will work
canvas.drawBitmap(image, matrix, null);

Если бы я запустил все тот же код, но просто переключил setScale на секунду, он бы работал, но setTranslate не будет.

Кажется, это должен быть простой ответ. Кстати: с тем, как мой код настроен с использованием поста, это будет не практично.

matrix.postScale();
matrix.postTranslate(); 

Заранее спасибо

Ответы [ 2 ]

20 голосов
/ 19 марта 2011

Когда вы вызываете любой из методов set * (), вы заменяете все содержимое матрицы.В первом примере учитывается только setTranslate ().Вам необходимо использовать методы pre * () и post * () для объединения операций перевода и масштабирования.

0 голосов
/ 16 июня 2014

Код ответа Romain

matrix.setScale(zoom, zoom); // this will not work
matrix.postTranslate(currentX, currentY); // this will work
canvas.drawBitmap(image, matrix, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...