百度地图在android中的使用 实现多个覆盖物

时间:2021-04-15 22:44:08

这里是我自己写的一个小demo,可以供大家参考

百度地图在android中的使用 实现多个覆盖物

在这里面我使用的是二维数组保存的经纬度,到时候大家可以根据自己的需求更改

果断贴上代码

布局我用的是最简单的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f3f2f2"
android:orientation="vertical">

<com.baidu.mapapi.map.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"/>


</RelativeLayout>

贴上activity
package com.sxyrd.yrdapp.ui;

import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.sxyrd.yrdapp.R;
import com.sxyrd.yrdapp.base.BaseActivity;
import com.sxyrd.yrdapp.utils.Utils;

/**
* Created by Fly0116 on 2016/4/26 0026.
* 商家地图显示
*/
public class BusMapActivity extends BaseActivity {
private MapView mMapView;
BaiduMap mBaiduMap = null;
Marker marker=null;

@Override
protected int getLayoutId() {
return R.layout.activity_bussion_map;
}

@Override
public void initView() {
mMapView = (MapView) findViewById(R.id.map);
mBaiduMap = mMapView.getMap();
}

@Override
public void initData() {
//创建InfoWindow展示的view
double[][] numsix={{39.93923,116.357428},{39.91923, 116.327428},
{39.89923, 116.347428}, {39.89923, 116.367428},
{39.91923, 116.397428},{39.963175, 116.400244},
{39.86923, 116.397428}};
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_gcoding);
for (int i=0;i<numsix.length;i++){
LatLng pt = new LatLng(numsix[i][0], numsix[i][1]);
Button button = new Button(getApplicationContext());
button.setId(2000+i);
button.setBackgroundResource(R.mipmap.popu);
button.setText("餐厅标识"+(i+1));
button.setPadding(5,0,5,0);
button.setTextColor(getResources().getColor(R.color.black));
final int finalI = i+1;
//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(pt)
.icon(bitmap);
//在地图上添加Marker,并显示
mBaiduMap.showInfoWindow(mInfoWindow);
marker = (Marker) (mBaiduMap.addOverlay(option));
Bundle bundle = new Bundle();
bundle.putSerializable("info", "餐厅"+finalI);
marker.setExtraInfo(bundle);

}
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
final String name= (String) marker.getExtraInfo().get("info");
Button button = new Button(getApplicationContext());
button.setBackgroundResource(R.mipmap.popu);
button.setText("餐厅标识"+name);
button.setPadding(5,0,5,8);
button.setTextColor(getResources().getColor(R.color.black));
final LatLng ll = marker.getPosition();
Point p = mBaiduMap.getProjection().toScreenLocation(ll);
LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
InfoWindow mInfoWindow = new InfoWindow(button, llInfo, -47);
mBaiduMap.showInfoWindow(mInfoWindow);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.toast("餐厅标识"+name);
mBaiduMap.hideInfoWindow();
}
});
return true;
}
});
}

@Override
public void onClick(View v) {

}
}

以下是我项目里使用的jar

百度地图在android中的使用 实现多个覆盖物

大家可以参考

如果有什么问题,可以留言,相互探讨