在map上點擊某個標記時,想讓該標記變更圖示,以便使用者辨別目前點選的項目,可以使用以下作法。
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;
}
但如果你在ItemizedOverlay<OverlayItem>裡面原先是將Drawable設置為super(boundCenterBottom(defaultMarker))的話,會發現點擊後雖然變色了但是圖示移位了,這時在setBounds的地方必須設置以下(也就是boundCenterBottom的意思)
int dWidth = drawable.getIntrinsicWidth();
int dHeight = drawable.getIntrinsicHeight();
marker.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
做到這裡發現如果點擊下一個marker,上一個marker沒有變回來,我自己使用以下方式
OverlayItem item = items.get(arg0);
Drawable marker = context.getResources().getDrawable(R.drawable.map_pin);
Drawable markers = context.getResources().getDrawable(R.drawable.map_pins);
int dWidth = marker.getIntrinsicWidth();
int dHeight = marker.getIntrinsicHeight();
marker.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
markers.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
//如果點擊的跟之前點擊的物件不同,恢復上一支旗標的顏色,變更目前點選旗標顏色
if(arg0!=itemPotiion){
//恢復上一支旗標的顏色
if(itemPotiion!=-1){
OverlayItem before_item = items.get(itemPotiion);
before_item.setMarker(marker);
}
//變更目前旗標顏色
item.setMarker(markers);
}
itemPotiion=arg0;//記錄點選的項目
參考網址:
http://pastebin.com/eAhEHssQ
http://stackoverflow.com/questions/7038636/how-to-change-the-marker-for-the-overlay-on-tap-for-android