Я пишу приложение для Android (Xamarin), которое может масштабировать и панорамировать изображение. Пользователь также может щелкнуть позицию на изображении. Мне нужны эти координаты на изображении для последующего использования.
Следующий код увеличивает и панорамирует изображение:
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
_maxX = canvas.Width;
_maxY = canvas.Height;
canvas.Translate(_posX, _posY);
if (_scaleDetector.IsInProgress)
canvas.Scale(_scaleFactor, _scaleFactor, _scaleDetector.FocusX, _scaleDetector.FocusY);
else
canvas.Scale(_scaleFactor, _scaleFactor, _lastGestureX, _lastGestureY);
}
Пока все хорошо, теперь у меня есть MotionEvent
в использовании, то есть LongPressListener
. Я написал следующий код для перевода координат из MotionEvent
в координаты на изображении:
var actualX = e.GetX() - (_parent._posX / _parent._scaleFactor);
var actualY = e.GetY() - (_parent._posY / _parent._scaleFactor);
e
в данном случае - это рамка изображения. Рамка содержит изображение (которое _parent
), пользователь может перетащить изображение. _parent._posX/Y
изменяются, когда это происходит. Пользователь также может увеличить изображение, это _scaleFactor
.
Итак, когда пользователь нажимает где-нибудь в e
, мне нужно преобразовать эти координаты в координаты изображения.
Эти две строки кода работают, но когда пользователь увеличивает масштаб, координаты отключаются, как вы можете видеть на прикрепленном изображении:
Красные точки обозначают рассчитанные позиции. Как вы можете видеть, если пользователь увеличивает масштаб изображения в координатах, становится больше. Что не так в этом расчете?