安卓仿滴滴顺风车高德地图选择区域不规则矩形

该文章介绍了如何使用高德地图SDK在Android平台上实现滴滴顺风车的选区页面,通过创建可拖动的Marker并监听其拖动回调,动态更新并绘制连接各点的线段。在初始化地图、设置隐私协议和UI后,文章详细说明了添加Marker、处理拖动事件以及绘制多边形线的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:

目标:

  • 实现滴滴顺风车选择范围的页面,
  • 效果图
    在这里插入图片描述

整体思路:

  • 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次,直到你变的怀疑自己…
少纠缠,多随缘,多遇见好的事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值