实现功能如上图所示
1.需要绘制多个mark点,
2.可以点击生成一个自定义的infowindow
3.点击可以根据本机状况跳转高德地图或者百度地图
实现功能
一,绘制多个mark点
前提条件,我们继承好了高德地图和实现了地图绘制,实现了地图蓝点绘制
我们根据接口得到了网点的json数据
数据结构是这样的
于是我们解析下数据,
if(netWorkEntity.code.equals("2000")){
data = netWorkEntity.data; LoggerUtil.systemOut("AmapNetWorkEntity",netWorkEntity.toString());
if(data!=null){
for(int i=0;i<data.size();i++){
String position= data.get(i).position;
String drivingSchoolName=data.get(i).latnames;
String[] LatLng = positionToLatlng(position);
Double Markerlongitude = Double.valueOf(LatLng[0].trim());
Double Markerlatitude = Double.valueOf(LatLng[1].trim());
aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
.position(new LatLng(Markerlatitude, Markerlongitude))
.title(drivingSchoolName)
.draggable(true)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.mark3)));
}
}
}
在绘制mark点的时候就把,网点的name取出来,以后绘制infowindow的时候有用
二。给mark上绘制自定义的infowindow
在mark点上绘制点击事件
// 定义 Marker 点击事件监听
AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
// marker 对象被点击时回调的接口
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow(); // 显示点对应 的infowindow
return false;
}
};
/**
* 监听自定义infowindow窗口的infowindow事件回调
*/
@Override
public View getInfoWindow(Marker marker) {
View infoWindow=LayoutInflater.from(this).inflate(R.layout.map_bubble_back,null);//custom_info_window为自定义的layout文件
TextView name=(TextView)infoWindow.findViewById(R.id.inforwindow_text);
name.setText( marker.getTitle());
return infoWindow;
}
在重写父类的getInfoWindow方法中,我们用自定义的布局做背景,并且吧绘制mark点时候存入的网点名称取了出来
在infowindow的点击回调里边,我们判断当前时候安装了高德地图或者百度地图
AMap.OnInfoWindowClickListener listener = new AMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
if(isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&isAvilible(MapActivity.this,"com.autonavi.minimap")){
showPopupWindow(marker.getPosition().latitude,marker.getPosition().longitude);
}else if(isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&!isAvilible(MapActivity.this,"com.autonavi.minimap")){
showPopupWindowBaiDu(marker.getPosition().latitude,marker.getPosition().longitude);
}else if (!isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&isAvilible(MapActivity.this,"com.autonavi.minimap")){
showPopupWindowGaoDe(marker.getPosition().latitude,marker.getPosition().longitude);
}else if(!isAvilible(MapActivity.this,"com.baidu.BaiduMap")&&!isAvilible(MapActivity.this,"com.autonavi.minimap")){
}
}
};
跳转不同的popuwindow,
我们把mark点里边的经纬度取出来,赋值给popuwindow,
private void showPopupWindow(double latitude, double longitude) {
LoggerUtil.i( "fenglatlon",latitude+"");
LoggerUtil.i( "fenglatlon",longitude+"");
markLongitude=longitude;
markLatitude=latitude;
View contentView= LayoutInflater.from(MapActivity.this).inflate(R.layout.popu_map,null);
mPopWindow = new PopupWindow(contentView,
WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, true);
mPopWindow.setContentView(contentView);
View map_gaode=(View)contentView.findViewById(R.id.map_gaode);
View map_baidu=(View)contentView.findViewById(R.id.map_baidu);
map_gaode.setOnClickListener(this);
map_baidu.setOnClickListener(this);
//显示popupwindow
View rootview=LayoutInflater.from(MapActivity.this).inflate(R.layout.activity_map,null);
mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
mPopWindow.showAtLocation(rootview, Gravity.CENTER,0,0);
}
在popuwindow的创建之后,我们把这个mark点的经纬度取出来,掉时候传输给高德地图或者百度地图
下面是popuwindow两个item的点击事件,分别传递给了高德地图和百度地图
@Override
public void onClick(View v) {
int id=v.getId();
switch (id){
case R.id.map_gaode:
double a[]= GPSUtil.gcj02_To_Gps84(markLatitude,markLongitude);//lon 维度 lat 经度
double lat=a[0];
double lon=a[1];
LoggerUtil.i("latlon",lat+" "+lon);
Uri mUri = Uri.parse("geo:"+lat+""+