高德地图设置标记点,点击弹出infowindow,点击其他地方消失

使用高德地图SDK集成地图功能,在地图上显示Marker标记点,点击设置的标记点弹出弹窗显示信息,这部分可参考我的另一篇文章,地址:https://blog.csdn.net/u013184970/article/details/84874780;今天要补充的内容是,弹出弹窗后,如果想关闭弹窗怎么办,点击地图上的其它部位关闭弹窗功能。

网上大部分的解决办法都是直接在map的setOnMarkerClickListener方法里像下面这样写(错误的):

第一种是

        aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
            @SuppressLint("LongLogTag")
            @Override
            public boolean onMarkerClick(Marker marker) {
                if (marker.isInfoWindowShown()){
                    marker.hideInfoWindow();
                }else {
                    marker.showInfoWindow();
                }
                Log.e("setOnMarkerClickListener", "Marker被点击了");
                return false;//return true 的意思是点击marker,marker不成为地图的中心坐标,反之,成为中心坐标。
            }
        });

此时弹窗会一直显示,并没有关闭。

 第二种是

        aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
            @SuppressLint("LongLogTag")
            @Override
            public boolean onMarkerClick(Marker marker) {
                curShowWindowMarker = marker;
                Log.e("setOnMarkerClickListener", "Marker被点击了");
                return false;//return true 的意思是点击marker,marker不成为地图的中心坐标,反之,成为中心坐标。
            }
        });


        aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                if (curShowWindowMarker.isInfoWindowShown()){
                    curShowWindowMarker.hideInfoWindow();
                }else {
                    curShowWindowMarker.showInfoWindow();
                }
            }
        });

这种方式在点击marker的时候弹窗不能弹出,但是点击地图其他部位的时候却能弹出弹窗,再点击其他部位关闭弹窗,也不能达到想要的效果。

以上两种方法本人亲自试了都不可行, 之后自己又写了下面这种方法,亲试可行,以供需要的朋友参考

首先设置两个全局变量:

private Marker curShowWindowMarker;
private boolean infoWindowShown = false;

然后再写Map的两个方法:

        aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
            @SuppressLint("LongLogTag")
            @Override
            public boolean onMarkerClick(Marker marker) {
                curShowWindowMarker = marker;
                infoWindowShown = false;
                Log.e("setOnMarkerClickListener", "Marker被点击了");
                return false;//return true 的意思是点击marker,marker不成为地图的中心坐标,反之,成为中心坐标。
            }
        });

        aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                Log.e("tag","onMapClick");
                Log.e("tag","curShowWindowMarker="+curShowWindowMarker.isInfoWindowShown());
                //点击其它地方隐藏infoWindow
                if(curShowWindowMarker.isInfoWindowShown() && !infoWindowShown){
                    infoWindowShown = true;
                    return;
                }

                if(curShowWindowMarker.isInfoWindowShown() && infoWindowShown){
                    curShowWindowMarker.hideInfoWindow();
                }
            }
        });

如果有更好的方式欢迎探讨一下。

发布了92 篇原创文章 · 获赞 38 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/u013184970/article/details/101768076