本人也有做过百度地图的marker,但是百度地图的引用实在很麻烦,各种导包,so,jar,还有配置。所以高德就比较方便了。
只需引用下面的几句 定位 地图 导航 全都ok!
compile 'com.amap.api:3dmap:5.6.0'
compile 'com.amap.api:location:3.7.0'
compile 'com.amap.api:search:5.5.0'
然后设置
android:name="com.amap.api.v2.apikey"
android:value="官网申请的value" />
首先我们得写一个mapView和Amap
private MapView mapView;
private AMap aMap;
然后对地图进行设置
aMap = mapView.getMap();
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.strokeColor(Color.TRANSPARENT);// 设置圆形的边框颜色
myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));// 设置圆形的填充颜色
myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细
aMap.setMyLocationStyle(myLocationStyle);
aMap.getUiSettings().setMyLocationButtonEnabled(true);
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(HEXIN, 4));
aMap.setMapType(MAP_TYPE_NORMAL);
从服务器拿到的肯定是一组数据,我们把它转化为一个实体类的集合
List list=new ArrayList;
接下来我们就在地图上marker了
for (int i = 0; i < list.size(); i++) {
MarkerOptions markerOption = new MarkerOptions();
markerOption.position(new LatLng(Double.parseDouble(list.get(i).getLat()),
Double.parseDouble(list.get(i).getLng())));
markerOption.draggable(false);//设置Marker可拖动
markerOption.title(String.valueOf(i)); markerOption.icon(BitmapDescriptorFactory.fromView(getMyView(list.get(i).getTitle ))); aMap.addMarker(markerOption); }
注意我的代码,我设置了一个markerOption.title(String.valueOf(i));其实是给每个marker一个标识点,到时候,你点击marker就知道是哪个marker了。里面的 return true 的意思是点击marker,marker不成为地图的中心坐标,反之,成为中心坐标。
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
String id=marker.getTitle();
MarkerListEntity listEntity=list.get(Integer.valueOf(id));//拿到这个实体类了 就可以做操作了
return true;
}
});
在marker点的时候我们需要自定义marker点,有时候可以通过一个布局来动态设置,我把getMyView代码也给贴出来吧,
我这里的布局仅仅是一个TextView,你可以根据不同的需求设置不同的自定义marker图标.
markerOption.icon(BitmapDescriptorFactory.fromView(getMyView(mFootPrintEntityList.get(i).getTitle )));
protected View getMyView(String pm_val) {
View view = getActivity().getLayoutInflater().inflate(R.layout.mymarker, null);
TextView tv_val = (TextView) view.findViewById(R.id.marker_tv_val);
tv_val.setText(pm_val);
return view;
}