1

目标:

1,指定经纬度,显示一个图片,点击图片能显示相应的介绍信息
2,当前屏幕把所有指定的坐标点都显示出来

预览效果:添加了四个点,红色定位图片表示出来

clipboard.png


实现

  1. 准备条件:
    配置百度地图,只要能findViewById(R.id.baidumap)能显示百度地图就ok
    定位图片
    clipboard.png

    四个点经纬度

       (23.17859302386026,113.41829099999994);
       (23.174924078737078,113.41754841746837);
       (23.172392232625878,113.41464769219638);
       (23.15051685805627,113.4161170382473);
  2. 代码实现
        //构建Marker图标
        BitmapDescriptor bd = BitmapDescriptorFactory
                .fromResource(R.drawable.location_ic_select);
        // 初始化四个点
        List<LatLng> list = new ArrayList<>();
        LatLng point1 = new LatLng(23.17859302386026,113.41829099999994);
        LatLng point2 = new LatLng(23.174924078737078,113.41754841746837);
        LatLng point3 = new LatLng(23.172392232625878,113.41464769219638);
        LatLng point4 = new LatLng(23.15051685805627,113.4161170382473);
        list.add(point1);
        list.add(point2);
        list.add(point3);
        list.add(point4);
        //创建OverlayOptions的集合
        List<OverlayOptions> options = new ArrayList<OverlayOptions>();
        for(LatLng point:list){
            //创建OverlayOptions属性
            OverlayOptions option1 =  new MarkerOptions()
                    .position(point)
                    .icon(bd);
            //将OverlayOptions添加到list
            options.add(option1);
        }
        //在地图上批量添加
        mBaiduMap.addOverlays(options);
        // 让手机屏幕显示出所有点
        mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
               
                LatLngBounds.Builder builder = new LatLngBounds.Builder();
                for(LatLng latLng : list){
                    builder = builder.include(latLng);
                }
                LatLngBounds latlngBounds = builder.build();
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(latlngBounds,mMapView.getWidth(),mMapView.getHeight());
                mBaiduMap.animateMapStatus(u);
            }
        });

以上代码便能在地图上显示出四个点了
clipboard.png

 3. 图标点击事件:点击图标后显示一些信息

clipboard.png

            // 每个图标都是一个Marker,通过百度地图的Marker的点击事件来达到想要的效果
            mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                // 构建一个需要显示的view,我这里只是一个textview,也可以是其他的布局
                TextView tv = new TextView(mContext);
                tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                tv.setBackgroundResource(R.drawable.shape_buttn_text);
                tv.setText("hello world");
                // -130表示的是y轴的便宜量
                InfoWindow infoWindow =new InfoWindow(tv,marker.getPosition(),-130);
                //通过百度地图来显示view
                mBaiduMap.showInfoWindow(infoWindow);
                return true;
            }
        });
    4. 点击非图标区域隐藏Marker

        // 我这里的解决方法是设置地图底图的点击事件,来隐藏marker
        mMapView.getChildAt(0).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mBaiduMap.hideInfoWindow();
            }
        });

结束


hosition
82 声望0 粉丝

这个人很懒,没写简介。。