Использование setScale и setTranslate (Матрица)

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

после Большого тестирования я определил, что все, что я называю вторым, работает.

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

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

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

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

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

2 ответов


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


код ответа Romain

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