android百度开发显示多个点标记,Android百度地图开发(三)多标注及对应信息弹窗显示...

(本篇只给出相关代码供参考,其余代码需自行补全,望耐心参考)

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

//标注

private Marker mMarkerA;

private Marker mMarkerB;

private Marker mMarkerC;

private InfoWindow mInfoWindow;

// 初始化全局 bitmap 信息,不用时及时 recycle

BitmapDescriptor bdA;

BitmapDescriptor bdB;

BitmapDescriptor bdC;

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

bdA = BitmapDescriptorFactory

.fromResource(R.drawable.icon_marka);

bdB = BitmapDescriptorFactory

.fromResource(R.drawable.icon_markb);

bdC = BitmapDescriptorFactory

.fromResource(R.drawable.icon_markc);

3.添加初始化方法如下

public void initOverlay() {

//声明三个标注点

LatLng llA = new LatLng(39.963175, 116.400244);

LatLng llB = new LatLng(39.942821, 116.369199);

LatLng llC = new LatLng(39.939723, 116.425541);

//弹窗

MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA)

.zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);

mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));

Fire fire1 = new Fire("2017-7-7", "1", "11");

Bundle bundle1 = new Bundle();

bundle1.putSerializable("Fire", fire1);

mMarkerA.setExtraInfo(bundle1);

//弹窗

MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdB)

.zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);

mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));

Fire fire2 = new Fire("2017-7-7", "2", "22");

Bundle bundle2 = new Bundle();

bundle2.putSerializable("Fire", fire2);

mMarkerB.setExtraInfo(bundle2);

//弹窗

MarkerOptions ooC = new MarkerOptions().position(llC).icon(bdC)

.zIndex(7).animateType(MarkerOptions.MarkerAnimateType.grow);

mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));

Fire fire3 = new Fire("2017-7-7", "3", "33");

Bundle bundle3 = new Bundle();

bundle3.putSerializable("Fire", fire3);

mMarkerC.setExtraInfo(bundle3);

ArrayList giflist = new ArrayList();

giflist.add(bdA);

giflist.add(bdB);

giflist.add(bdC);

}

说明:声明三个标注点显示标注信息,

提前写好Fire实体,通过new初始化fire1、fire2、fire3,并通过setExtraInfo传入

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

initOverlay();

/**

* 标注点击监听

*/

mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {

public boolean onMarkerClick(final Marker marker) {

//弹窗点击监听

InfoWindow.OnInfoWindowClickListener listener = null;

listener = new InfoWindow.OnInfoWindowClickListener() {

@Override

public void onInfoWindowClick() {

//点击弹窗后要执行的代码,如Toast:您点击了弹窗

}

};

//弹窗要展示的信息实体

Fire fire = new Fire();

//获取之前传递的Fire

fire = (Fire) marker.getExtraInfo()

.getSerializable("Fire");

//mBaiduMap.hideInfoWindow();

//渲染布局模版

MarkerFire markerFire = new MarkerFire(

getActivity(), fire);

BitmapDescriptor descriptor = BitmapDescriptorFactory

.fromView(markerFire);

//获取标注坐标显示对应弹窗

LatLng ll = marker.getPosition();

mInfoWindow = new InfoWindow(descriptor, ll, -47, listener);

mBaiduMap.showInfoWindow(mInfoWindow);

return true;

}

});

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

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

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

public class MarkerFire extends LinearLayout {

private Context mContext = null;

private View mView = null;

private TextView fire_time;

public MarkerFire(Context context, Fire fire) {

super(context);

mContext = context;

initView();

setfireInfo(fire);

}

private void initView() {

mView = LayoutInflater.from(mContext).inflate(R.layout.item_fragment_marker_fire, null);

fire_time = (TextView) mView.findViewById(R.id.marker_fire_time);

this.addView(mView);

}

/**

* 设置poi详情信息

*

* @param fire

*/

private void setfireInfo(Fire fire) {

fire_time.setText(fire.getFire_time());

}

public MarkerFire(Context context, AttributeSet attrs) {

super(context, attrs);

}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值