1,指定經緯度,顯示一個圖片,點擊圖片能顯示相應的介紹信息 2,當前屏幕把全部指定的座標點都顯示出來
預覽效果:添加了四個點,紅色定位圖片表示出來ide
準備條件:
配置百度地圖,只要能findViewById(R.id.baidumap)能顯示百度地圖就ok
定位圖片
佈局
四個點經緯度ui
(23.17859302386026,113.41829099999994); (23.174924078737078,113.41754841746837); (23.172392232625878,113.41464769219638); (23.15051685805627,113.4161170382473);
//構建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); } });
以上代碼便能在地圖上顯示出四個點了
spa
3. 圖標點擊事件:點擊圖標後顯示一些信息
// 每一個圖標都是一個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(); } });