Verwenden von ItemizedOverlay und OverlayItem in Android Beta 0.9
-
09-06-2019 - |
Frage
Hat jemand es geschafft, es zu benutzen? ItemizedOverlays
in Android Beta 0.9?Ich kann es nicht zum Laufen bringen, bin mir aber nicht sicher, ob ich etwas falsch gemacht habe oder ob diese Funktionalität noch nicht verfügbar ist.
Ich habe versucht, das zu verwenden ItemizedOverlay
Und OverlayItem
Klassen.Ihr beabsichtigter Zweck besteht darin, Kartenmarkierungen zu simulieren (wie in Google Maps Mashups zu sehen), aber ich hatte Probleme, sie auf der Karte anzuzeigen.
Ich kann meine eigenen benutzerdefinierten Overlays mit einer ähnlichen Technik hinzufügen, es ist einfach so ItemizedOverlays
das funktioniert nicht.
Sobald ich mein eigenes implementiert habe ItemizedOverlay
(und überschrieben createItem
), scheint das Erstellen einer neuen Instanz meiner Klasse zu funktionieren (ich kann extrahieren OverlayItems
davon), sondern es zu einer Karte hinzufügen Overlay
list lässt es nicht so erscheinen, wie es sollte.
Dies ist der Code, den ich zum Hinzufügen verwende ItemizedOverlay
Klasse als Overlay
weiter zu meinem MapView
.
// Add the ItemizedOverlay to the Map
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();
}
Wo MyItemizedOverlay
ist definiert als:
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;
}
}
Lösung
Der Vollständigkeit halber wiederhole ich die Diskussion zu Retos Beitrag drüben Android-Gruppen hier.
Es scheint, dass es den Zweck erfüllt, wenn Sie die Grenzen für Ihr Zeichenobjekt festlegen:
Drawable defaultMarker = r.getDrawable(R.drawable.icon);
// You HAVE to specify the bounds! It seems like the markers are drawn
// through Drawable.draw(Canvas) and therefore must have its bounds set
// before drawing.
defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
defaultMarker.getIntrinsicHeight());
MyItemizedOverlay markers = new MyItemizedOverlay(defaultMarker);
overlays.add(markers);
Übrigens ist das oben Gesagte schamlos entwendet die Demo bei MarcelP.info.Auch hier ist ein gute Anleitung.