Search code examples
androiditemizedoverlayosmdroid

OSMdroid add custom icons to ItemizedOverlay


I am using ItemizedIconOverlay class and I'm currently displaying events on the map along with the user's position with the same default icon.

How do I change the icon set for each overlay?

Is there something similar to the google.maps example:

    drawable = getResources().getDrawable(R.drawable.marker);
    drawable3 = getResources().getDrawable(R.drawable.disruption);
    drawable2 = getResources().getDrawable(R.drawable.marker_me);

    itemizedOverlay = new MyItemizedOverlay(drawable, mapView);
    itemizedOverlay2 = new MyItemizedOverlay(drawable2, mapView);
    itemizedOverlay3 = new MyItemizedOverlay(drawable3, mapView);

I had each itemizedOverlay have its own marker...

How do I do this with Open Street Maps?

mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems, new Glistener(), mResourceProxy);

Thank you for your help and its a shame not much support is available online for this open source project ...


Solution

  • Presumably your mItems is an ArrayList of OverlayItems created like:

    mItems = new ArrayList<OverlayItem>();
    

    To this list you will be adding individual OveralyItems, so when you create each item you can do it like this, setting the marker before you add it to the list:

    OverlayItem olItem = new OverlayItem("Here", "SampleDescription", point);
    Drawable newMarker = this.getResources().getDrawable(R.drawable.mymarker);
    olItem.setMarker(newMarker);
    mItems.add(olItem);
    

    where mymarker is a .png in your drawables folder.

    Update - to set default marker for whole overlay, change

    this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems, new Glistener(), mResourceProxy);
    

    to

    this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems, newMarker, new Glistener(), mResourceProxy);
    

    where newMarker is as before