学习目标:
目标:
- 实现滴滴顺风车选择范围的页面,
- 效果图
整体思路:
- 1,页面上放个高德地图
- 2,放6个marker,高德sdk中的marker可拖动,且有回调
- 3,根据回调,不停的画线,把点连起来
引库(高德官方库):
implementation 'com.amap.api:navi-3dmap:latest.integration'
Acitivty代码:
- 声明一些关键的东西
private MapView mapView;
private AMap aMap;
private ArrayList<LatLng> latLngs=new ArrayList<LatLng>();
private Polygon polygon;
private PolygonOptions polygonOptions;
- 在onCreat中,初始化这些东西
//标准6句话,避免那些莫名其妙的隐私协议导致的bug
ServiceSettings.updatePrivacyShow(this,true,true);
ServiceSettings.updatePrivacyAgree(this,true);
MapsInitializer.updatePrivacyShow(this,true,true);
MapsInitializer.updatePrivacyAgree(this,true);
AMapLocationClient.updatePrivacyShow(this,true,true);
AMapLocationClient.updatePrivacyAgree(this,true);
mapView=(MapView)findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
//这里是官网上自定义地图UI,可有可无
aMap.setCustomMapStyle(new CustomMapStyleOptions()
.setEnable(true)
.setStyleDataPath(VolleyUtils.getDir_OutFile(this) +"/needM2/style.data")
.setStyleExtraPath(VolleyUtils.getDir_OutFile(this) +"/needM2/style_extra.data"));
//关闭右下角放大缩小按钮
aMap.getUiSettings().setZoomControlsEnabled(false);
//镜头拖动改变事件
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {}
});
//marker拖动事件
aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
//交互一下,比如振动一下,或marker变色等,我业务中用振动
}
@Override
public void onMarkerDrag(Marker marker) {
String s=marker.getTitle();
s=s.replaceAll("a","");
int b=Integer.valueOf(s);
latLngs.get(i).latitude=marker.getPosition().latitude;
latLngs.get(i).longitude=marker.getPosition().longitude;
//每次marker拖动,都不停的绘制线段
huizhi();
}
@Override
public void onMarkerDragEnd(Marker marker) {}
});
//TODO 开始你的业务↓↓↓↓↓↓↓↓
//将镜头移动到某个点
CameraPosition cameraPosition=new CameraPosition(new LatLng(37.830900191726094,112.55558953851154),13,0,0);
CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
aMap.moveCamera(mCameraUpdate);
//绘制
drawShow();
- 用到的方法
private void huizhi(){
if(polygon!=null){
polygon.remove();
}
polygonOptions = new PolygonOptions();
for(LatLng latLng:latLngs){
polygonOptions.add(latLng);
}
polygonOptions.strokeWidth(8) // 多边形的边框
.strokeColor(Color.argb(255, 255, 0, 0)) // 边框颜色
.fillColor(Color.argb(30, 255, 0, 0)); // 多边形的填充色
polygon=aMap.addPolygon(polygonOptions);
}
//给地图上绘制6个拖动点,看自己业务,123456789个随意
//点的数据来源于上面的ArrayList<LatLng> latLngs,数据可来源于网络,或自己默认的,看业务
//标准情况下,为了区别点击的事哪个marker
//给aMap.addMarker会返回一个Marker对象,再给Marker对象setObject,来给予一些业务属性,如id等
//为了方便,这里直接把index放在title里
private void drawShow(){
for(int i=0;i<latLngs.size();i++){
MarkerOptions markerOption = new MarkerOptions();
markerOption.position(new LatLng(latLngs.get(i).latitude,latLngs.get(i).longitude));
markerOption.title("a"+i);
markerOption.draggable(true);//设置Marker可拖动
View markerView23 = LayoutInflater.from(this).inflate(R.layout.marker7,mapView,false);
markerOption.icon(BitmapDescriptorFactory.fromView(markerView23));
markerOption.anchor(0.5f,0.5f);//偏移量,为了好看
aMap.addMarker(markerOption);
}
其他:
上面的【ArrayList】仅为示例,可根据自己业务修改,如jsonarray等
高德的marker可拖动且有回调,的确省了很多事
不要相信任何人给你的大饼,真正有心给你钱的人,砸锅卖铁也会给你先安排上
并且不会给你说他有多难
那些破事,有第一次,就有第二次,第N次,直到你变的怀疑自己…
少纠缠,多随缘,多遇见好的事