2008-08-25 4 views
47

Est-ce que quelqu'un a réussi à utiliser ItemizedOverlays dans Android Beta 0.9? Je ne peux pas le faire fonctionner, mais je ne suis pas sûr si j'ai fait quelque chose de mal ou si cette fonctionnalité n'est pas encore disponible. J'ai essayé d'utiliser les classes ItemizedOverlay et OverlayItem. Leur but est de simuler des marqueurs de carte (comme dans Google Maps Mashups) mais j'ai eu des problèmes pour les faire apparaître sur la carte.Utilisation de ItemizedOverlay et OverlayItem dans Android Beta 0.9

Je peux ajouter mes propres superpositions personnalisées en utilisant une technique similaire, c'est juste le ItemizedOverlays qui ne fonctionne pas. Une fois que j'ai implémenté mon propre ItemizedOverlay (et remplacé createItem), créer une nouvelle instance de ma classe semble fonctionner (je peux en extraire des OverlayItems) mais l'ajouter à la liste Overlay d'une map ne la fait pas apparaître Comme il se doit.

Ceci est le code que j'utilise pour ajouter la classe ItemizedOverlay en tant que superposition à mon 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(); 
} 

MyItemizedOverlay est défini comme:

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

Répondre

36

Par souci d'exhaustivité, je vais répéter la discussion sur le poste de Reto sur le Android Groups ici.

Il semble que si vous définissez les limites de votre drawable il fait l'affaire:

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

Par ailleurs, ce qui précède est sans vergogne arraché de la démo à MarcelP.info. Voir aussi here pour un bon howto.

+0

est-ce juste moi ou votre dernier est vide? – Reno