1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 百度地图添加自定义Marker+显示覆盖层次优先级

百度地图添加自定义Marker+显示覆盖层次优先级

时间:2021-05-17 07:09:25

相关推荐

百度地图添加自定义Marker+显示覆盖层次优先级

转载请注明出处:/wll995806658

实际项目中经常会集成地图,今天就只谈谈百度地图添加自定义Marker这一部分,希望对百度地图集成有这部分需求的小伙伴能有一些帮助。

百度地图文档里面对marker的添加只是很简短的说了常用的添加图标,但是如果项目中的需求有时候往往需要布局比较复杂的覆盖物

如果项目需求是点击Marker的时候才弹出某个布局,那么可以为Marker添加点击事件setOnMarkerClickListener来做弹出InfoWindow操作

//创建InfoWindow展示的view Button button = new Button(getApplicationContext()); button.setBackgroundResource(R.drawable.popup); //定义用于显示该InfoWindow的坐标点 LatLng pt = new LatLng(39.86923, 116.397428); //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量 InfoWindow mInfoWindow = new InfoWindow(button, pt, -47); //显示InfoWindow mBaiduMap.showInfoWindow(mInfoWindow);

图1

当然有时候需求是每个覆盖物加载的时候就需要比较复杂的布局时,这种方法显然是不行的,这时候就需要我们通过自定义Marker来实现,百度地图只是讲解了如何添加简单图标的Marker,方法如下:

//定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地图上添加Marker,并显示 mBaiduMap.addOverlay(option);

这里只是将图片icon_marka资源文件作为marker通过BitmapDescriptorFactory.fromResource进行加载,如果需要加载自定义的布局

1.首先自己先写好一个自己想要达到效果的布局文件,这里就不再贴代码了。以图1效果为例,若上方的button改为TextView,其实不改也可以。

2.定义一个获取icon的方法,设置返回数据类型为BitmapDescriptor,例:

public BitmapDescriptor getBitmapDescriptor() {

BitmapDescriptor bttmap = null;

View item_view = LayoutInflater.from(activity).inflate(R.layout.frag_near_marker,null);

TextView tv_storeName = (TextView) item_view.findViewById(R.id.frag_near_marker_tv_name);

ImageView imageView = (ImageView) item_view.findViewById(R.id.frag_near_marker_iv_logo);

// 设置布局中文字

tv_storeName.setText("");

// 设置图标

imageView.setImageResource(R.mipmap.home_icon_department);

bttmap = BitmapDescriptorFactory.fromView(item_view);

return bttmap;

}

这里面调用的是百度地图BitmapDescriptorFactory.fromView的方法加载一个布局,而不再只是BitmapDescriptorFactory.fromResource加载图片等资源文件。

3.在MarkerOptions设置icon的时候传入getBitmapDescriptor方法返回的数据即可。

这样一来就可以实现每个Marker加载出来都能像图1一样的效果,而且点击事件是整个加载的布局都有效。

其次来谈一谈显示的优先级问题,即想要让哪个覆盖物显示在上层,哪些覆盖物在缩小地图视角的时候可以被其他覆盖物覆盖。

这里给大家谈一下两个方法,如果只是想让某个覆盖物在缩小地图视角的时候在追上层显示,那么可以考虑为Marker设置setTop()属性来实现,参数传入true或者false,如果是想为每一个Marker都编排显示层次的优先级,那么可以考虑在设置MarkerOptions的时候调用zIndex()方法,参数传入一个int类型的值,那么Marker会根据这个值的大小来排列显示层次的优先级,值越大,就会显示在越上层。

本博客仅供参考,如有错误,欢迎指出。非常感谢!

附上百度地图文档链接 百度地图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。