优定义网

Android百度地图开发(三)多标注及对应信息弹窗显示

蔡一妍 发表于 2018-6-11 21:58:31 | 显示全部楼层 |阅读模式

1.添加标注及信息弹窗声明如下(为方便理解,声明三个标注并用不同的图标显示):

  1. //标注  
  2.     private Marker mMarkerA;  
  3.     private Marker mMarkerB;  
  4.     private Marker mMarkerC;  
  5.     private InfoWindow mInfoWindow;  
  6.     // 初始化全局 bitmap 信息,不用时及时 recycle  
  7.     BitmapDescriptor bdA;  
  8.     BitmapDescriptor bdB;  
  9.     BitmapDescriptor bdC;  
复制代码

2.对声明进行赋值,写在布局初始化各种findViewById之后即可

  1. bdA = BitmapDescriptorFactory  
  2.                 .fromResource(R.drawable.icon_marka);  
  3.         bdB = BitmapDescriptorFactory  
  4.                 .fromResource(R.drawable.icon_markb);  
  5.         bdC = BitmapDescriptorFactory  
  6.                 .fromResource(R.drawable.icon_markc);  
复制代码

3.添加初始化方法如下

  1. public void initOverlay() {  
  2.         //声明三个标注点  
  3.         LatLng llA = new LatLng(39.963175, 116.400244);  
  4.         LatLng llB = new LatLng(39.942821, 116.369199);  
  5.         LatLng llC = new LatLng(39.939723, 116.425541);  
  6.   
  7.   
  8.         //弹窗  
  9.         MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA)  
  10.                 .zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);  
  11.         mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));  
  12.   
  13.         Fire fire1 = new Fire("2017-7-7", "1", "11");  
  14.         Bundle bundle1 = new Bundle();  
  15.         bundle1.putSerializable("Fire", fire1);  
  16.         mMarkerA.setExtraInfo(bundle1);  
  17.   
  18.         //弹窗  
  19.         MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdB)  
  20.                 .zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);  
  21.         mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));  
  22.   
  23.         Fire fire2 = new Fire("2017-7-7", "2", "22");  
  24.         Bundle bundle2 = new Bundle();  
  25.         bundle2.putSerializable("Fire", fire2);  
  26.         mMarkerB.setExtraInfo(bundle2);  
  27.   
  28.         //弹窗  
  29.         MarkerOptions ooC = new MarkerOptions().position(llC).icon(bdC)  
  30.                 .zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);  
  31.         mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));  
  32.   
  33.         Fire fire3 = new Fire("2017-7-7", "3", "33");  
  34.         Bundle bundle3 = new Bundle();  
  35.         bundle3.putSerializable("Fire", fire3);  
  36.         mMarkerC.setExtraInfo(bundle3);  
  37.   
  38.   
  39.         ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();  
  40.         giflist.add(bdA);  
  41.         giflist.add(bdB);  
  42.         giflist.add(bdC);  
  43.   
  44.     }  
复制代码

说明:声明三个标注点显示标注信息,提前写好Fire实体,通过new初始化fire1、fire2、fire3,并通过setExtraInfo传入

4.在第2步代码后继续写如下代码(调用第3步的初始化方法,然后绑定标注监听事件及信息弹窗监听事件)

  1. initOverlay();  
  2.   
  3.   
  4.         /**
  5.          * 标注点击监听
  6.          */  
  7.         mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {  
  8.             public boolean onMarkerClick(final Marker marker) {  
  9.   
  10.                 //弹窗点击监听  
  11.                 InfoWindow.OnInfoWindowClickListener listener = null;  
  12.                 listener = new InfoWindow.OnInfoWindowClickListener() {  
  13.   
  14.                     @Override  
  15.                     public void onInfoWindowClick() {  
  16.   
  17.                         //点击弹窗后要执行的代码,如Toast:您点击了弹窗  
  18.                           
  19.   
  20.                     }  
  21.                 };  
  22.   
  23.                 //弹窗要展示的信息实体  
  24.                 Fire fire = new Fire();  
  25.                 //获取之前传递的Fire  
  26.                 fire = (Fire) marker.getExtraInfo()  
  27.                         .getSerializable("Fire");  
  28.   
  29.                 //mBaiduMap.hideInfoWindow();  
  30.   
  31.                 //渲染布局模版  
  32.                 MarkerFire markerFire = new MarkerFire(  
  33.                         getActivity(), fire);  
  34.   
  35.                 BitmapDescriptor descriptor = BitmapDescriptorFactory  
  36.                         .fromView(markerFire);  
  37.                 //获取标注坐标显示对应弹窗  
  38.                 LatLng ll = marker.getPosition();  
  39.                 mInfoWindow = new InfoWindow(descriptor, ll, -47, listener);  
  40.                 mBaiduMap.showInfoWindow(mInfoWindow);  
  41.   
  42.                 return true;  
  43.             }  
  44.         });  
复制代码

说明:提前写好要渲染的模版MarkerFire,用于信息弹窗的布局及信息展示

5.补全其余代码,调通运行

注意:声明的实体要implements Serializable,否则会报错,模版MarkerFire的class文件及对应xml布局文件调用部分代码如下

  1. public class MarkerFire extends LinearLayout {  
  2.   
  3.     private Context mContext = null;  
  4.     private View mView = null;  
  5.     private TextView fire_time;  
  6.   
  7.     public MarkerFire(Context context, Fire fire) {  
  8.         super(context);  
  9.         mContext = context;  
  10.         initView();  
  11.         setfireInfo(fire);  
  12.     }  
  13.   
  14.     private void initView() {  
  15.         mView = LayoutInflater.from(mContext).inflate(R.layout.item_fragment_marker_fire, null);  
  16.         fire_time = (TextView) mView.findViewById(R.id.marker_fire_time);  
  17.         this.addView(mView);  
  18.   
  19.     }  
  20.   
  21.     /**
  22.      * 设置poi详情信息
  23.      *
  24.      * @param fire
  25.      */  
  26.     private void setfireInfo(Fire fire) {  
  27.   
  28.         fire_time.setText(fire.getFire_time());  
  29.          
  30.     }  
  31.   
  32.     public MarkerFire(Context context, AttributeSet attrs) {  
  33.         super(context, attrs);  
  34.     }  
  35.   
  36. }  
复制代码

如果还有问题或更好方法,欢迎留言讨论,如果是代码补全问题,请自行补充Android基础知识。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精华推荐
  • 一个人开始废掉的3种迹象

    一个人开始废掉的3种迹象

  • 从零到60秒的惬意冰镇啤酒

    从零到60秒的惬意冰镇啤酒

  • 马云、马化腾、王石都弃之不用的人,有一个共同点

    马云、马化腾、王石都弃之不用的人,有一个

  • 哥特式高迪凳子

    哥特式高迪凳子

  • 千亿小米,雷军逆袭

    千亿小米,雷军逆袭

  • 她一战赚了几十亿,她说:世界上最好的生意有三种

    她一战赚了几十亿,她说:世界上最好的生意有

  • 雷军:合伙人比制度更重要!

    雷军:合伙人比制度更重要!

  • 一个美美的令人喜欢的自行车铃

    一个美美的令人喜欢的自行车铃

QQ客服热线
QQ:1090281100 周一至周日:09:00 - 21:00
WeChat:dianlingkeji
Email:kaixin1069@vip.qq.com

优定义logo

勿要吝啬你无形资产,请为创新续源,知识、点子、灵感、经验、需求等均是创新源泉,你不经意的一句话将是另一个人的灵感。明天的明天,还有明天,我们应该把握今天,每一个今天,都有一个新的事物在出现,今天的漠视明天的落后,不浪费每一个学习的时刻,学习助力非凡。

技术支持 Discuz! X3.4 - 3.5 beta © 2001-2018 Comsenz Inc.

小黑屋|手机版|优定义 ( 粤ICP备16085288号-2 )|申请友链|网站地图

粤公网安备 44011102001144 号 GMT+8, 2018-10-17 11:53 , Processed in 0.090942 second(s), 26 queries .

快速回复 返回顶部 返回列表