Android Google Maps API中类ItemizedOverlay提供了两种处理点击(tap)的事件:
1.onTap(GeoPoint p, MapView mapView)
Handle a tap event.
2.onTap(int index)
Override this method to handle a "tap" on an item.
两种方法可以同时重载,利用第二种重载方法我们可以在点击图标时弹出信息窗口,如下:
但是仅仅重载第二个onTap是不够的,当用户点击图标之外的区域,正常逻辑是信息窗应该消失,但是情况恰恰相反,点击图标区域之外信息窗不会消失,怎么处理呢?
这时我们可以重载第一个方法(onTap(GeoPoint p, MapView mapView)
),当用户点击图标之外的区域,清空信息窗列表,如下:
代码结构可以这么写:
@Override
protected boolean onTap(int i) {
//得到当前点击的对象
OverlayItem item = mOverlays.get(i);
setFocus(item);
//点击图标显示信息窗口
showInfoWindow(item);
//必须返回true,让后面一个onTap方法知道点击了图标
return true;
}
@Override
public boolean onTap(GeoPoint geoPoint, MapView mapView) {
//注意super.onTap(geoPoint, mapView)这个方法,如果点击了图标,返回的结果是
//true,如果没有点到图标,即在区域之外,返回的结果是false,这个重载方法是对地图
//而言的,只要点击了地图,就会触发,通过super.onTap(geoPoint, mapView)的返回
//结果来判断是否点击到了图标
if (!super.onTap(geoPoint, mapView)) {
//移除已经显示的信息窗口
removeInfoWindow();
}
return true;
}
参考来源: