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

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://blog.csdn.net/yak262/article/details/6656961

posted @ 2011-12-12 16:38  南极_撒哈拉  阅读(820)  评论(0)    收藏  举报