2008-08-25 11 views
47

Alguien ha logrado utilizar ItemizedOverlays en Android Beta 0.9? No puedo conseguir que funcione, pero no estoy seguro de si he hecho algo mal o si esta funcionalidad no está disponible todavía.ItemizedOverlay y OverlayItem En Android Beta 0.9

He estado tratando de usar las clases ItemizedOverlay y OverlayItem. Su propósito es simular marcadores de mapa (como se ve en Google Maps Mashups), pero he tenido problemas para que aparezcan en el mapa.

Puedo agregar mis propias superposiciones personalizadas usando una técnica similar, es solo ItemizedOverlays que no funcionan.

Una vez que he implementado mi propio ItemizedOverlay (y anulado createItem), parece que funciona la creación de una nueva instancia de mi clase (puedo extraer OverlayItems de ella) pero agregarlo a la lista de superposición del mapa no lo hace aparecer como debería.

Este es el código que uso para agregar la clase ItemizedOverlay como una superposición en mi 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(); 
} 

Dónde MyItemizedOverlay se define como:

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

Respuesta

36

En aras de la exhaustividad Voy a repetir la discusión en el post de Reto encima en el Android Groups aquí.

Parece que si establece los límites en su dibujable lo hace el truco:

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

Por cierto, lo anterior es arrancado sin pudor de la demostración en MarcelP.info. También vea here para un buen howto.

+0

¿es solo yo o su último como está vacío? – Reno

Cuestiones relacionadas