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

转载请注明出处:blog.csdn.net/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会根据这个值的大小来排列显示层次的优先级,值越大,就会显示在越上层。


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


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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值