Utilizzo di ItemizedOverlay e OverlayItem in Android Beta 0.9
-
09-06-2019 - |
Domanda
Qualcuno è riuscito ad usarlo ItemizedOverlays
nell'Android Beta 0.9?Non riesco a farlo funzionare, ma non sono sicuro di aver fatto qualcosa di sbagliato o se questa funzionalità non è ancora disponibile.
Ho provato a utilizzare il file ItemizedOverlay
E OverlayItem
classi.Il loro scopo previsto è simulare gli indicatori di mappa (come visto in Google Maps Mashup) ma ho avuto problemi a farli apparire sulla mappa.
Posso aggiungere le mie sovrapposizioni personalizzate utilizzando una tecnica simile, è solo il ItemizedOverlays
quello non funziona.
Una volta implementato il mio ItemizedOverlay
(e sovrascritto createItem
), la creazione di una nuova istanza della mia classe sembra funzionare (posso estrarre OverlayItems
da esso) ma aggiungendolo a una mappa Overlay
list non lo fa apparire come dovrebbe.
Questo è il codice che utilizzo per aggiungere il file ItemizedOverlay
classe come un Overlay
al mio 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();
}
Dove MyItemizedOverlay
è definito come:
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;
}
}
Soluzione
Per completezza ripeterò la discussione sul post di Reto su Gruppi Android qui.
Sembra che se imposti i limiti sul tuo drawable faccia il trucco:
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);
A proposito, quanto sopra è stato spudoratamente copiato la demo su MarcelP.info.Inoltre, ecco un buon tutorial.