So verwenden Sie ItemizedOverlay
und OverlayItem
effektiv in Android Beta 0.9
Wenn Sie ein Entwickler sind, der mit Android arbeitet, sind Ihnen möglicherweise Herausforderungen begegnet, als Sie versuchten, die Funktionen ItemizedOverlay
und OverlayItem
in Ihren Kartenanwendungen zu implementieren, insbesondere in Android Beta 0.9. Dieser Artikel zielt darauf ab, ein häufiges Problem in diesem Zusammenhang zu erkunden und eine detaillierte Lösung zu präsentieren, die Ihnen helfen wird, diese Kartenmarker reibungslos zum Laufen zu bringen.
Das Problem
Beim Versuch, ItemizedOverlay
zu nutzen, um Marker auf Ihrer Karte (ähnlich wie in Google Maps) zu erstellen, haben Sie möglicherweise bemerkt, dass die Marker nicht wie erwartet angezeigt werden. Hier ist das Szenario, das Ihnen vielleicht bekannt vorkommt:
- Sie haben Ihre
MyItemizedOverlay
-Klasse eingerichtet, die vonItemizedOverlay
erbt. - Wenn Sie versuchen, dieses Overlay zu Ihrer
MapView
hinzuzufügen, werden trotz erfolgreicher Extraktion derOverlayItems
keine Marker angezeigt.
Hier ist ein Ausschnitt aus dem Code, den Sie möglicherweise verwenden, um das Overlay hinzuzufügen:
private void addItemizedOverlay() {
Resources r = getResources();
MapView mapView = (MapView)findViewById(R.id.mymapview);
List<Overlay> overlays = mapView.getOverlays();
MyItemizedOverlay markers = new MyItemizedOverlay(r.getDrawable(R.drawable.icon));
overlays.add(markers);
OverlayItem oi = markers.getItem(0);
markers.setFocus(oi);
mapView.postInvalidate();
}
Klassendefinition
Ihre MyItemizedOverlay
-Klasse könnte wie folgt definiert sein:
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
public MyItemizedOverlay(Drawable defaultMarker) {
super(defaultMarker);
populate();
}
@Override
protected OverlayItem createItem(int index) {
Double lat = (index + 37.422006) * 1E6;
Double lng = -122.084095 * 1E6;
GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
OverlayItem oi = new OverlayItem(point, "Marker", "Marker Text");
return oi;
}
@Override
public int size() {
return 5;
}
}
Die Lösung: Grenzen für Ihr Drawable festlegen
Das Hauptproblem liegt oft in der Abwesenheit von festgelegten Grenzen für das Drawable
, das mit Ihren Markern verbunden ist. So können Sie dies beheben:
Schritt 1: Grenzen für das Drawable festlegen
Bevor Sie Ihr ItemizedOverlay
hinzufügen, stellen Sie sicher, dass Sie die Grenzen für Ihr Drawable festlegen. Dies ist entscheidend, da die draw
-Methode des Drawables auf diese Grenzen angewiesen ist, um korrekt auf dem Canvas zu rendern. So können Sie es tun:
Drawable defaultMarker = r.getDrawable(R.drawable.icon);
// Grenzen für Ihr Drawable festlegen
defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
defaultMarker.getIntrinsicHeight());
MyItemizedOverlay markers = new MyItemizedOverlay(defaultMarker);
overlays.add(markers);
Warum sind Grenzen wichtig?
- Rendering-Mechanik: Die Marker werden über die Methode
Drawable.draw(Canvas)
gezeichnet, die erfordert, dass Grenzen angegeben werden, damit das Drawable weiß, wo es sich auf dem Canvas rendern soll. - Sichtbarkeit: Ohne richtige Grenzen sind Ihre Marker möglicherweise nicht auf der Karte sichtbar, was während des Entwicklungsprozesses zu Verwirrungen führen kann.
Zusätzliche Ressourcen
Für weitere Informationen und eine detaillierte Anleitung können Sie die folgenden Ressourcen besuchen:
Fazit
Durch das ordnungsgemäße Festlegen der Grenzen für Ihr Drawable
sollten Sie feststellen, dass Ihr ItemizedOverlay
wie beabsichtigt funktioniert und die Marker auf Ihrer Karte anzeigt. Diese Lösung ist für Entwickler, die mit ähnlichen Problemen in Android Beta 0.9 konfrontiert sind, von entscheidender Bedeutung, um eine reibungslosere Entwicklungserfahrung bei der Implementierung von Kartenfunktionen in Ihren Anwendungen zu gewährleisten.
Wenn Sie weitere Fragen haben oder Ihre Erfahrungen mit der Implementierung von ItemizedOverlay
teilen möchten, hinterlassen Sie gerne einen Kommentar unten!