2008-08-25 20 views
47

Czy ktoś zdołał użyć ItemizedOverlays w Androidzie Beta 0.9? Nie mogę go uruchomić, ale nie jestem pewien, czy zrobiłem coś złego, czy ta funkcjonalność nie jest jeszcze dostępna.Korzystanie z ItemizedOverlay i OverlayItem w Androidzie Beta 0.9

Próbuję użyć klas ItemizedOverlay i OverlayItem. Ich celem jest symulowanie znaczników mapy (jak widać w Google Maps Mashups), ale miałem problemy z ich wyświetleniem na mapie.

Mogę dodać własne niestandardowe nakładki przy użyciu podobnej techniki, to tylko ItemizedOverlays, które nie działają.

Po zaimplementowaniu własnego ItemizedOverlay (i przesłonięcia createItem), tworzenie nowej instancji mojej klasy wydaje się działać (mogę wyodrębnić z niej OverlayItems), ale dodanie jej do listy nakładek na mapie nie spowoduje jej wyświetlenia jak powinno.

To jest kod, którego używam do dodania klasy ItemizedOverlay jako nakładki do mojego 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(); 
} 

Gdzie MyItemizedOverlay jest zdefiniowany jako:

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

Odpowiedz

36

Dla kompletności wywodu będę powtarzać dyskusję na stanowisku Reto nad na Android Groups tutaj.

Wydaje się, że jeśli ustawić granice na rozciągliwej to załatwia sprawę:

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

Nawiasem mówiąc, powyższy jest bezwstydnie zgrane z demo na MarcelP.info. Zobacz też: here.

+0

czy to tylko ja lub twoje ostatnie jest puste? – Reno

Powiązane problemy