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

本文详细介绍了如何在Android Google Maps API中使用ItemizedOverlay类处理点击事件,包括两种方法的使用及场景。重点解决了点击图标之外区域时信息窗口不消失的问题,通过重载方法实现地图区域点击时信息窗口的清除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值