Выберите линии на холсте - PullRequest
0 голосов
/ 24 апреля 2018

Я нарисовал линии на холсте, прочитав список объектов Line, в основном это просто x1, y1, x2 и y2.

Изображение можно масштабировать и прокручивать благодаря MatrixGestureDetector, но теперь яхотел бы иметь возможность "выбрать" строку, щелкнув по ней.Под выбором я имею в виду его выделение и сохранение либо в списке выбранных строк, либо наличие Boolean в атрибутах строки.

Мне удалось определить координаты щелчка и рассчитать относительные координаты в зависимости отна масштабный коэффициент и перевод.Я сравнил координаты моего клика с координатами всех линий, и если щелчок находится на линии, он становится шире.

Проблема в том, что вы должны быть настолько точными, что невозможно выбрать одну без масштабирования в ад, и если две линии находятся слишком близко, они обе выбраны. Как я могу выбрать только самую близкую линию (на определенном расстоянии вокругмой клик)?

Спасибо за помощь

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете попробовать с простой математикой, скажем, у вас есть 3 балла A B и C

B и C - ваш сегмент, а A - точка, где был сделан клик

Расстояние между B (x1, y1) и A (x2, y2) равно sqrt ((x1-x2) ^ 2 + (y1-y2) ^ 2), назовем его distBA

Расстояние между C (x1, x2) и A (x2, y2) снова равно sqrt ((x1-x2) ^ 2 + (y1-y2) ^ 2), назовем его distCA

теперь нам нужна другая переменная masterDistance = distBA + distCA

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

Вы также можете проверить, если оно меньше определенного значения, чтобы избежать случая, когда у вас есть 2 строки: одна вверху экрана и одна внизу, а пользователь нажимает в середине. Без этой проверки линия будет по-прежнему выделена, даже если щелчок находится рядом с любой из линий.

...