2008-08-25 10 views
47

Hat es jemand geschafft, ItemizedOverlays in Android Beta 0.9 zu verwenden? Ich kann es nicht zur Arbeit bringen, aber ich bin mir nicht sicher, ob ich etwas falsch gemacht habe oder ob diese Funktionalität noch nicht verfügbar ist.Verwenden von ItemizedOverlay und OverlayItem In Android Beta 0.9

Ich habe versucht, die ItemizedOverlay und OverlayItem Klassen zu verwenden. Ihr beabsichtigter Zweck ist es, Kartenmarkierungen zu simulieren (wie in Google Maps Mashups zu sehen), aber ich hatte Probleme, sie auf der Karte erscheinen zu lassen.

Ich kann meine eigenen benutzerdefinierten Overlays mit einer ähnlichen Technik hinzufügen, es ist nur die ItemizedOverlays, die nicht funktionieren.

Sobald ich meine eigene ItemizedOverlay (und überschriebene createItem) implementiert habe, scheint das Erstellen einer neuen Instanz meiner Klasse zu funktionieren (ich kann OverlayItems daraus extrahieren), aber wenn ich sie zur Überlagerungsliste einer Map hinzufüge, wird sie nicht angezeigt so wie es sollte.

Dies ist der Code, den ich verwende, um die ItemizedOverlay Klasse als Overlay auf meine hinzuzufügen.

// 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 wie folgt definiert ist:

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; 
    } 
} 

Antwort

36

Aus Gründen der Vollständigkeit ich an den Android Groups hier die Diskussion über Reto die Post über wiederholen würde.

Es scheint, dass, wenn Sie die Grenzen auf ziehbar gesetzt es funktioniert der Trick:

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); 

By the way, ist die oben schamlos aus der Demo riss bei MarcelP.info. Siehe auch here für eine gute Anleitung.

+0

ist es nur ich oder dein letztes Like ist leer? – Reno