Aktualisieren overlay-Objekt in der Map-Aktivität auf Android
Habe ich eine Karte zu erstellen Aktivität und oben auf, dass, ich brauche etwas zeigen Ort Punkte. Diese Standorte sind abrufen aus einer hashtable in einer anderen Klasse. Der Inhalt dieser hashtable immer verpasst. Ich erwarte also zu sehen, dass diese Position Flecken auf der Karte, Aktivität, bewegen, wie die Hash-Tabelle wird geändert.
Der code ist unten dargestellt:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapview);
MapView mapView = (MapView) this.findViewById(R.id.map);
mapView.setStreetView(true);
mc = mapView.getController();
mc.animateTo(...);
mc.setZoom(12);
mapView.invalidate();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
MarkerOverlay mark = new MarkerOverlay(p);
listOfOverlays.add(mark);
for(Entry<Long,Pair> p: LQTManager.getInstance().ResultTable.entrySet())
{
GeoPoint point = new GeoPoint(
(int) (p.getValue().x * 1E6),
(int) (p.getValue().y * 1E6));//some code is not shown
MarkerOverlay markerOverlay = new MarkerOverlay(point);
listOfOverlays.add(markerOverlay);
}
mapView.postInvalidate();
}
class MarkerOverlay extends com.google.android.maps.Overlay
{
public GeoPoint pt;
public MarkerOverlay(GeoPoint pt){
this.pt=pt;
}
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
Point screenPts = new Point();
mapView.getProjection().toPixels(pt, screenPts);
Bitmap bmp = BitmapFactory.decodeResource(
getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x-16, screenPts.y-32, null);
return true;
}
}
Gibt es eine Möglichkeit, zu aktualisieren overlay-Objekte, wenn ich den Bildschirm berühren. Ich denke auch über einige Funktionen im onTap Methode überschreiben von MarkerOverlay. Aber ich denke, es ist nicht logisch, wenn ich versuche das Overlay-Bild versuchen Sie, sich deutlich?
Jede vorgeschlagene Idee?
es Neuzeichnen der mapview, nicht-overlay-Objekt.
InformationsquelleAutor aladine | 2011-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
mapView.postInvalidate() aktualisiert die Ansicht der Karte und aktualisieren Sie die overlays. Ich bin mit diesem mit einer Lauffähigen aktualisieren meine overlays jede Sekunde:
Perfekt - danke. @hectichavana - Wenn Sie nicht wollen, regelmäßige updates, einfach anrufen mapView.postInvalidate() direkt, und ignoriert alle Ablaufenden Sachen. Für die regelmäßigen Aktualisierungen finden Sie unter developer.android.com/reference/android/os/Handler.html.
InformationsquelleAutor filitchp
Der vielleicht nicht perfekt, aber es funktionierte für mich, verschieben Sie die Karte ein wenig hin und her, welche updates alle overlays danach.
Ja, so würde ich empfehlen, die Antwort des filitchp!
InformationsquelleAutor joecks
Beim hinzufügen oder entfernen eines overlayItem, die Sie brauchen zu call füllen() in Ihrem MarkerOverlay Klasse.
InformationsquelleAutor Vincent
Verwenden
MapController.notifyRepaint();
InformationsquelleAutor diman