Я пытаюсь создать динамический ItemizedOverylay
(см. Код ниже) на Картах Google (Android 2.1) на Nexus One.Динамические оверлеи, замедляющие Google Maps (Android 2.1) на Nexus One
В моем Activity
(который расширяет MapActivity) Я создаю поток данных, который принимает данные из сети. «Обработчик» используется для передачи данных из принимающего потока для отображения активности. Эти данные содержат местоположения (lat, lon) маркеров, которые я хочу наложить на мою карту. Расположение каждого маркера является динамическим (т. Е. Изменяется каждый раз, когда я получаю новые данные из сети.) refreshItems(ArrayList<OverlayItem> newItems)
метод, вызываемый внутри обработчика handleMessage()
. В ArrayList содержится около 11 маркеров, которые передаются в refreshItems
Я вижу маркеры, наложенные на карту. Однако у меня есть два вопроса:
Старые маркеры не удаляются с карты. Через некоторое время я вижу след маркеров.
Карта не реагирует на любые команды касания. Я не могу перемещать карту, увеличивать или уменьшать масштаб. Через некоторое время я вижу системное предупреждение о том, что мое приложение не отвечает (ожидание/закрытие?).
Не поймите, что здесь не так?
Спасибо.
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> overlayItems;
public CoTItemizedOverlay(Drawable defaultMarker) {
super(boundCenter(defaultMarker));
overlayItems = new ArrayList<OverlayItem>();
populate();
}
public void addNewItem(GeoPoint location, String markerText, String snippet) {
overlayItems.add(new OverlayItem(location, markerText, snippet));
populate();
}
public void removeItem(int index) {
overlayItems.remove(index);
populate();
}
public void refreshItems(ArrayList<OverlayItem> newItems) {
// remove all existing items
for (int i = 0; i < cotoverlayItems.size(); i++) {
overlayItems.remove(i);
}
// copy all the items
if (newItems != null && cotoverlayItems.size() == 0) {
overlayItems.addAll(newItems);
}
populate();
}
@Override
protected OverlayItem createItem(int index) {
return overlayItems.get(index);
}
@Override
public int size() {
return overlayItems.size();
}
}
Также мне нужно сделать метод обновления поточно? –