Tuesday, May 15, 2012

How to change the marker for the overlay on tap for android?


i have made an application in which i need to change the drawable of an overlayitem when a user clicks on it. i am using the following code to achieve this effect:




protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
if(item.getTitle().equals("true")){
if(item.getMarker(OverlayItem.ITEM_STATE_FOCUSED_MASK).equals(greenMarker)){
item.setMarker(orangeMarker);
view1ComplainPoleList.add(item.getSnippet());
Log.i("adding",item.getSnippet());
map.invalidate();
}
else{
item.setMarker(greenMarker);
view1ComplainPoleList.remove(item.getSnippet());
Log.i("removing",item.getSnippet());
map.invalidate();
}
}
return true;
}



But this does not seem to be working. whenever i click on an overlayitem it disappears from view. what is going wrong?



UPDATE:



could you also tell me how to load new views when the map is scrolled...?



thank you in advance.


Source: Tips4all

3 comments:

  1. This is very simple to do:

    protected boolean onTap(int index) {
    OverlayItem item = mOverlays.get(index);
    //Get the new Drawable
    Drawable marker = mContext.getResources().getDrawable(R.drawable.icon);
    //Set its bounds
    marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
    //Set the new marker
    item.setMarker(marker);
    //Return true! Do not invalidate
    return true;
    }

    ReplyDelete
  2. I have no idea what view1ComplainPoleList is and whether it is impacting matters. I handled this by subclassing OverlayItem and overriding getMarker() to return the proper image. Here is the sample project in which I use this technique.

    ReplyDelete
  3. Use Setbounds api to set the bounds as follows: Edited your original code

    protected boolean onTap(int index) {
    OverlayItem item = mOverlays.get(index);
    if(item.getTitle().equals("true")){
    if(item.getMarker(OverlayItem.ITEM_STATE_FOCUSED_MASK).equals(greenMarker)){
    orangeMarker.setBounds(0,0,orangeMarker.getIntrinsicWidth(),orangeMarker.getIntrinsicHeight());
    item.setMarker(orangeMarker);
    view1ComplainPoleList.add(item.getSnippet());
    Log.i("adding",item.getSnippet());
    map.invalidate();
    }
    else{
    greenMarker.setBounds(0,0,greenMarker.getIntrinsicWidth(),greenMarker.getIntrinsicHeight());
    item.setMarker(greenMarker);
    view1ComplainPoleList.remove(item.getSnippet());
    Log.i("removing",item.getSnippet());
    map.invalidate();
    }
    }
    return true;
    }

    ReplyDelete