百度地圖繪製點、圖形

目標:

1,指定經緯度,顯示一個圖片,點擊圖片能顯示相應的介紹信息
2,當前屏幕把全部指定的座標點都顯示出來

預覽效果:添加了四個點,紅色定位圖片表示出來ide

clipboard.png


實現

  1. 準備條件:
    配置百度地圖,只要能findViewById(R.id.baidumap)能顯示百度地圖就ok
    定位圖片
    clipboard.png佈局

    四個點經緯度ui

    (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.pngspa

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();
            }
        });

結束

相關文章
相關標籤/搜索