Одним из главных классов для карт является MapView. Подобно рассмотренным ранее классам View, этот класс имеет метод onTouchEvent, который принимает в качестве единственного аргумента объект MotionEvent. Можно также воспользоваться методом setOnTouchListener и установить обработчик обратного вызова для событий касания на MapView. Другими основными типами объектов для карт является набор классов Overlay, включая ItemizedOverlay и MyLocationOverlay. Эти классы рассматривались . Классы Overlay также имеют метод onTouchEvent, хотя его сигнатура слегка отличается от сигнатуры метода onTouchEvent обычного View. В классах Overlay сигнатура этого метода выглядит следующим образом:
onTouchEvent(android.view.MotionEvent e, MapView mapView)
Если с картами нужно делать что-то другое, можно переопределить этот метод onTouchEvent. Чаще переопределяют методы в классе Overlay, чем в MapView, и на этом мы сосредоточим внимание в данном разделе. Как и ранее, метод onTouchEvent для классов Overlay имеет дело с объектами MotionEvent. Даже в случае карт объекты MotionEvent предоставляют координаты X and Y места, в котором пользователь коснулся сенсорного экрана. При работе с картами это не особенно полезно, т.к. чаще всего мы хотим знать действительное расположение на карте, где было совершено касание. К счастью, существуют способы выяснения этого.
Класс MapView предоставляет интерфейс по имени Projection, который, в свою очередь, имеет методы для преобразования пикселей в объекты GeoPoint и объектов GeoPoint в пиксели. Для получения объекта Projection необходимо вызвать метод MapView.getProjection. После этого можно использовать методы fromPixels и toPixels для выполнения преобразований. Помните, что объект Projection пригоден, только если карта не изменялась в представлении. Внутри переопределяемого
метода onTouchEvent с помощью fromPixels можно преобразовать значения позиции X и Y в объект GeoPoint.
В классе Overlay определен еще один интересный и очень полезный метод onTap, который похож на описанный ранее метод onTouch, но имеет одно ключевое отличие. В классах Overlay карты метод onTouch отсутствует. Сигнатура метода onTap выглядит следующим образом:
public boolean onTap(GeoPoint p, MapView mapView)
Когда пользователь касается на объекте Overlay, метод onTap вызывается с объектом GeoPoint, представляющим точку, на которой было совершено касание. При этом не понадобится тратить усилия на выяснение, в каком месте на карте пользователь выполнил касание. Также не придется заботиться о преобразовании координат X и Y позиции касания в значения широты и долготы — об этом позаботится Android.
Давайте вернемся к примеру из, в котором отображалась карта с кнопками режимов (Satellite (Спутник), Traffic (Пробки) и Normal (Обычный)). Мы собираемся реализовать возможность определения широты и долготы или местоположения на карте. Для этого необходимо добавить объект Overlay к MapView. Как только этот объект Overlay получит событие касания, мы преобразуем это событие в местоположение на карте. Имея преобразованное местоположение, мы отобразим с помощью Toast широту и долготу точки, на которой был совершен щелчок. Начните с создания копии приложения MapViewDemo в Eclipse (см. и.). Затем модифицируйте метод onCreate главной активности согласно. и добавьте новый класс в файле ClickReceiver.java, также ный в этом. Изменения в методе onCreate выделены полужирным. Пользовательский интерфейс приложения по- прежнему выглядит, .
Запустив модифицированное демонстрационное приложение работы с картами, увеличьте масштаб города, чтобы увидеть улицы. Если теперь коснуться на улице, будет вызван метод onTap объекта ClickReceiver, который, в свою очередь, отобразит сообщение Toast с широтой и долготой местоположения на карте, на котором производилось касание. Имея широту и долготу местоположения, можно воспользоваться классом http://batutmaster.ru/product/bolshaya-naduvnaya-gorka-tri-drakona Geocoder и выяснить, что находится возле этого местоположения. Местоположение можно было бы использовать для поочередной навигации к нему. Также при желании несложно измерить расстояние до местоположения от точки текущего нахождения. Можно даже сохранить местоположение для дальнейшей работы с ним.
Опубликовал katy
February 17 2015 18:41:02 ·
0 Комментариев ·
2758 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.