目标:
1,指定经纬度,显示一个图片,点击图片能显示相应的介绍信息
2,当前屏幕把所有指定的坐标点都显示出来
预览效果:添加了四个点,红色定位图片表示出来
实现
-
准备条件:
配置百度地图,只要能findViewById(R.id.baidumap)能显示百度地图就ok
定位图片四个点经纬度
(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);
}
});
以上代码便能在地图上显示出四个点了
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();
}
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。