您的位置:首页 > 运维架构

Android Google Maps onTap(int i)和onTap(GeoPoint geoPoint, MapView mapView)用法

2011-08-03 15:19 465 查看
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;

}

参考来源:

http://groups.google.com/group/android-developers/browse_thread/thread/91d4e6d87151a0e1/fceaec7c7e3850e8?show_docid=fceaec7c7e3850e8#

http://stackoverflow.com/questions/4971749/android-itemizedoverlay-ontouchevent-and-ontap-overlapping
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: