J'essaie de créer un ItemizedOverylay
dynamique (voir le code ci-dessous) sur Google Maps (Android 2.1) sur un Nexus One.Dynamic Overlays ralentissant Google Maps (Android 2.1) sur Nexus One
Dans mon Activity
(qui étend MapActivity), je crée un thread de données qui reçoit des données du réseau. Un «gestionnaire» est utilisé pour communiquer les données du thread de réception à l'activité de cartographie. Ces données contiennent les emplacements (lat, lon) des marqueurs que je veux superposer sur ma carte. L'emplacement de chaque marqueur est dynamique (c'est-à-dire qu'il change chaque fois que je reçois de nouvelles données du réseau.) refreshItems(ArrayList<OverlayItem> newItems)
méthode invoquée à l'intérieur du handleMessage()
du gestionnaire. Il y a environ 11 marqueurs dans l'ArrayList qui est passé à refreshItems
Je peux voir les marqueurs superposés sur la carte. Cependant, j'ai deux problèmes:
Les anciens marqueurs ne sont pas supprimés de la carte. Après un moment, je vois une traînée de marqueurs.
La carte ne répond à aucune commande tactile. Je ne peux pas déplacer la carte ou effectuer un zoom avant ou arrière. Après un certain temps, je vois un système avertissant que mon application ne répond pas (wait/close?) Message.
Une idée de ce qui ne va pas ici?
Merci.
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();
}
}
faire aussi que je dois faire le fil de la méthode de rafraîchissement en toute sécurité? –