Удалить itemizedOverlay во время onLocationChanged
Чего я хочу добиться, так это иметь 2 вида маркеров, отображаемых на карте.
1) Красные маркеры, отображающие события, извлеченные из базы данных (сделано это - itemizedOverlay)
2) Оранжевый маркер, который будет динамически отображать местоположение пользователя на карте (itemizedOverlay2).
Я использую ItemizedOverlay, чтобы иметь 2 разных слоя (один для событий и один для местоположения пользователя), но у меня есть проблема с динамическим маркером, который показывает положение пользователя.
ВОПРОС:
Что происходит, так это то, что LocationListener успешно получает широту / долготу и размещает точку на карте, но предыдущая точка все еще существует. Так что у меня есть след маркеров, показывающих местоположение пользователя.
Я реализовал несколько способов поиска в Интернете, но ни один из них не происходит во время вызова onLocationChanged.
class myLocationListener implements LocationListener{
OverlayItem overlayItem;
@Override
public void onLocationChanged(Location location) {
if (location != null){
mapOverlays.remove(itemizedOverlay2);
mapView.invalidate();
lat = location.getLatitude();
longi = location.getLongitude();
GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (longi * 1E6));
mControl.animateTo(point);
overlayItem = new OverlayItem(point, "My Location", "This is probably where you are");
itemizedOverlay2.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay2);
}
}
Я знаю, что вам может понадобиться больше моего кода, но давайте просто остановимся в этом блоке и посмотрим, увидит ли кто-то, где я ошибаюсь.
Спасибо.
2 ответа
Вы не опубликовали код для класса, которому принадлежит itemizedOverlay2, но я предполагаю, что он расширяет ItemizedOverlay. Поскольку у него есть метод addOverlay(), я также предполагаю, что у него есть метод.clear().
Если это так, вы должны вызвать clear (), прежде чем добавить новое местоположение
itemizedOverlay2.clear();
itemizedOverlay2.addOverlay(overlayItem);
Используйте встроенный класс MyLocationOverlay
:
position = new MyLocationOverlay(this, mapView);
position.enableMyLocation();
mapOverlays.add(position);