Android_百度地图API_通过点击地图在指定位置显示PopWindow

时间:2021-07-04 00:27:53

要想坑少,必须知道的多,不然只能踩着坑走了
网上的资料都是片段,这里经过整合已经可以很好很简单的实现了!!
本文直接带你实现点击地图在指定位置显示PopUpWindow

效果图如下
Android_百度地图API_通过点击地图在指定位置显示PopWindow
1.创建pop
这个就很多了,也比较简单就不啰嗦了
2.显示pop
推荐博客:popwindow位置解析
3.关联到百度地图

思路:将地图平移到指定的坐标点(目的地),然后将pop显示在控件的*
上代码:

MapStatus.Builder builder = new MapStatus.Builder();
    builder.target(ll).zoom(20.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory
                        .newMapStatus(builder.build()));
        // TODO 摆放window的位置

Log.d("zjs", " 最终显示----控件的h=" + height + " /////w = " + width);
if (height == 0 && width == 0)return;
naviWindow.showAtLocation(mMapView, Gravity.BOTTOM| Gravity.LEFT, ((width-navi.getWidth()) / 2), ((height+navi.getHeight()) / 2));
        navi.setLatLng(ll);//设置重点
        addDestInfoOverlay(ll);// 添加图标

参数
ll:(LatLng)目的地,或者指定的位置
18.0f (百度地图的显示比例尺(精度))
showAtLocation:
参数1:显示的控件中;//这里当然是百度地图的地图显示界面
参数2:引力属性(或者说相对于父控件的大概位置)
参数3:x轴偏移量(相对于手机屏幕坐标系)
参数4:y轴的偏移量(相对于手机屏幕坐标系)
这里应该就结束了

想看的同志们接下来,我们来一起分析我遇到的坑:
1.showAtLocation的第二个参数,看官方注释

Display the content view in a popup window at the specified location.
 If the popup window cannot fit on screen, it will be clipped.
 Specifying a gravity of android.view.Gravity.NO_GRAVITY is similar to specifying Gravity.LEFT | Gravity.TOP.

所以英语不好只能看着有道,挠着大脑了,
还是要看,我就是应为这个没怎么看懂而去尝试百度的标注marker的icon(fromView)的方法;走偏了(这个View不能有子控件,只能显示图片或者文字–所以只能看不能点)
pass掉

认真看介绍的那个博客,第二个参数应该是相对于父容器的位置,所以写法也很简单,都是Gravity的常量,而且也是可以通过“ | ”来叠加的,和布局一样

2.只有在控件完全加载到界面中,才能获取控件的相关属性,所以获取控件的位置这里可以参考博客
http://blog.csdn.net/ruingman/article/details/51474939
其中关键的代码

llMain.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  

            @Override  
            public void onGlobalLayout() {  
                if(height!=0&&width!=0)return;
                llMain.postDelayed(new Runnable() {  

                    @Override  
                    public void run() {  
                         height = mMapView.getHeight();
                         width = mMapView.getWidth();
                    }  
                }, 300);  
            }  
        }); 

参数1:LLamin:这里是View的子类(应该是父容器,最好的是GroupView),用于去获取测量观察者
参数2.postDelayed:开启轻量级线程用于去测量,
参数3.height,width,我们需要的结果!!!
在开启前加了一个判断,只要有值就不去做测量,因为只要有就好了
用于显示popupwindow!
有问题可以回复,看到肯定回答,
最后demo的地址
http://download.csdn.net/detail/fengdeweilai/9823520