масштабирование по центру в пользовательском представлении - вычисление координат холста

Я работаю над своим первым «настоящим» Android-приложением, графическим редактором рабочего процесса. Рисование выполняется в пользовательском классе, который является подклассом View. На данный момент мои элементы представляют собой прямоугольники, которые рисуются на холсте. Чтобы обнаружить действия с элементами, я сравниваю координаты и проверяю наличие элементов в месте касания.

Чтобы реализовать жест масштабирования, я попробовал http: //android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

С помощью функции canvas.scale (...) с 4 аргументами центрированное масштабирование работает хорошо, но я теряю возможность чтобы вычислить координаты холста, используя смещение с помощью mPosX и mPosY, чтобы определить, происходит ли прикосновение после увеличения к элементу.

Я попытался изменить пример в сообщении выше, чтобы центрировать холст на жесте масштабирования с помощью:

canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor, mScalePivotX, mScalePivotY);
//drawing ....
canvas.restore();

Я не нашел каких-либо примеров о том, как это может быть сделано без потери ссылок смещения для вычисления координат. Есть ли простой способ обхода? Я попытался вычислить смещение с центром жеста и коэффициентом масштабирования, но не смог: /

Я видел, что другие примеры, в которых используется ImageView, часто используют матрицу для преобразования изображения. Можно ли это сделать с помощью настраиваемого вида и холста? Если да, как мне получить смещение x и y для проверки координат?

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

Thx! ;)

6
задан m4tt 19 March 2011 в 13:57
поделиться