From c5e4a216bcd6dc80b774b8fe1df8c2c49defc633 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Tue, 7 Mar 2023 09:53:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=81=93=E8=B7=AF?= =?UTF-8?q?=E5=92=8CPOI=E5=BD=95=E5=83=8F=E4=BB=BB=E5=8A=A1=E7=BB=98?= =?UTF-8?q?=E5=88=B6=E8=BE=85=E5=8A=A9=E7=BA=BF=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/navinfo/outdoor/api/Constant.java | 3 + .../outdoor/base/BaseDrawerFragment.java | 10 + .../outdoor/fragment/PoiVideoFragment.java | 29 ++- .../outdoor/fragment/RoadFragment.java | 47 +++-- .../outdoor/fragment/TreasureFragment.java | 181 +++++++++++------- .../main/res/drawable-xhdpi/green_point.png | Bin 0 -> 1180 bytes app/src/main/res/layout/fragment_road.xml | 14 ++ .../main/res/layout/poi_video_fragment.xml | 14 ++ app/src/main/res/layout/treasure_fragment.xml | 47 ++--- 9 files changed, 243 insertions(+), 102 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/green_point.png diff --git a/app/src/main/java/com/navinfo/outdoor/api/Constant.java b/app/src/main/java/com/navinfo/outdoor/api/Constant.java index 9beb920..005a7e3 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/Constant.java +++ b/app/src/main/java/com/navinfo/outdoor/api/Constant.java @@ -150,6 +150,9 @@ public class Constant { public static final int CAPACITY_EVALUATION=59;//能力测试的返回 public static final int CHARGING_STATION_DISABLE=60;//能力测试的返回 public static final int EVENT_WHAT_UPLOAD_PROGRESS=61;// 数据上传的进度progress + public static final int EVENT_WHAT_CHANGE_SLIDING_STATE=62;// 改变抽屉的状态 + public static final int EVENT_WHAT_START_DRAW_LINE=63;// 开始绘制参考线 + public static final int EVENT_WHAT_FINISH_DRAW_LINE=64;// 完成绘制参考线 public static final String INTENT_POI_VIDEO_TYPE = "poi_video_type"; public static int NUMBER = 200; //任务个数 public static int LIMIT_TYPE = -1; //权限类型,普通任务-0,专属任务-1 diff --git a/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java b/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java index d1da9e5..7a15e8f 100644 --- a/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java @@ -175,4 +175,14 @@ public abstract class BaseDrawerFragment extends BaseFragment { } } + /** + * 隐藏抽屉界面 + * */ + public void changeSlidingLayout(int isVisible, SlidingUpPanelLayout.PanelState panelState) { + Message msg = Message.obtain(); + msg.what = Constant.EVENT_WHAT_CHANGE_SLIDING_STATE; + msg.arg1 = isVisible; + msg.obj = panelState; + EventBus.getDefault().post(msg); + } } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java index 140e8ef..2a27aed 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java @@ -63,6 +63,7 @@ import com.navinfo.outdoor.util.TimestampUtil; import com.navinfo.outdoor.util.ToastUtils; import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.util.ZipUtils; +import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; @@ -96,6 +97,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick private StringBuilder poiVideoBuilder; private LatLng rearLatLng; private boolean booleanExtra = true; + private TextView tvDrawLine; // 绘制辅助线 public static PoiVideoFragment newInstance(Bundle bundle) { PoiVideoFragment fragment = new PoiVideoFragment(); @@ -233,7 +235,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick @Override public boolean onLongClick(View v) { DialogSettings.style = DialogSettings.STYLE.STYLE_IOS; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { poiVideoBuilder.append(TimestampUtil.time()).append(",").append("点击了长按删除图片的 按钮,"); @@ -251,6 +253,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick }); btnRoadSave = findViewById(R.id.btn_poi_video_save); btnRoadSave.setOnClickListener(this); + tvDrawLine = findViewById(R.id.tv_draw_line_poi_video); + tvDrawLine.setOnClickListener(this::onClick); Button btnPoiVideoUpload = findViewById(R.id.btn_poi_video_upload); btnPoiVideoUpload.setOnClickListener(this); //添加数据 @@ -400,7 +404,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick } ivPoiVideoPicture.setImageDrawable(null); fmPoiVideoPic.setTag(null); - } else { + } else { boolean isImageLoad = false; for (int i = 0; i < fileListByUUID.size(); i++) { File videoFile = fileListByUUID.get(i); @@ -415,6 +419,13 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick fmPoiVideoPic.setTag(fileListByUUID); } initPoiVideoSharePre(); + } else if (data.what == Constant.EVENT_WHAT_FINISH_DRAW_LINE) { + // 显示原有抽屉画面 + changeSlidingLayout(View.VISIBLE, SlidingUpPanelLayout.PanelState.COLLAPSED); + if (data.arg1 == 1) { + List drawPoints = (List) data.obj; + showPoiEntity.setDrawLine(GeometryTools.getLineString(drawPoints)); + } } } @@ -509,9 +520,23 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick Constant.isPresent = false; } break; + case R.id.tv_draw_line_poi_video: + // 开始绘制辅助线,隐藏当前界面,展示地图,用户点击绘制线 + changeSlidingLayout(View.GONE, SlidingUpPanelLayout.PanelState.HIDDEN); + startDrawLine(); + break; } } + /** + * 开始绘制参考线 + * */ + private void startDrawLine() { + Message drawMsg = Message.obtain(); + drawMsg.what = Constant.EVENT_WHAT_START_DRAW_LINE; + EventBus.getDefault().post(drawMsg); + } + public void initPoiSaveLocal(boolean isLocal) { XXPermissions.with(getContext()) .permission(Permission.MANAGE_EXTERNAL_STORAGE) diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java index ee683b5..6574e4a 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java @@ -67,6 +67,7 @@ import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.ZipUtils; +import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; @@ -105,6 +106,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList private RadioGroup rgRoadStatus; // 道路状态的radioGroup private EditText edtCheckedOther; private int existence = 0; // 是否存在 + private TextView tvDrawLine; // 绘制辅助线 public static RoadFragment newInstance(Bundle bundle) { RoadFragment fragment = new RoadFragment(); @@ -150,18 +152,18 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList if (showPoiEntity != null) { if (showPoiEntity.getTaskStatus() == 5) { DialogSettings.style = DialogSettings.STYLE.STYLE_IOS; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { roadBuilder.append(TimestampUtil.time()).append(",").append("点击了返回当前页面的 确定 按钮,"); initEndReceiveTask(HttpInterface.UNRECEIVED_POLYGON_TASK, showPoiEntity); - Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack(); + requireActivity().getSupportFragmentManager().popBackStack(); return false; } }); } else if (showPoiEntity.getTaskStatus() == 0 || showPoiEntity.getTaskStatus() == 1) { DialogSettings.style = DialogSettings.STYLE.STYLE_IOS; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { roadBuilder.append(TimestampUtil.time()).append(",").append("点击了返回当前页面的 确定 按钮,"); @@ -187,7 +189,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList obtain1.obj = isSliding; EventBus.getDefault().post(obtain1); } - Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack(); + requireActivity().getSupportFragmentManager().popBackStack(); return false; } }); @@ -206,7 +208,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList obtain1.obj = isSliding; EventBus.getDefault().post(obtain1); } - Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack(); + requireActivity().getSupportFragmentManager().popBackStack(); } } } @@ -264,7 +266,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList @Override public boolean onLongClick(View v) { DialogSettings.style = DialogSettings.STYLE.STYLE_IOS; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) requireContext(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { roadBuilder.append(TimestampUtil.time()).append(",").append("点击长按删除 确定按钮,"); @@ -282,6 +284,8 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList }); btnRoadSave = findViewById(R.id.btn_road_save); btnRoadSave.setOnClickListener(this); + tvDrawLine = findViewById(R.id.tv_draw_line_road); + tvDrawLine.setOnClickListener(this::onClick); Button roadUpload = findViewById(R.id.road_upload); roadUpload.setOnClickListener(this); //数据展示 @@ -291,7 +295,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList @Override protected void initData() { super.initData(); - SharedPreferences sharedPreferences = Objects.requireNonNull(getActivity()).getSharedPreferences(Constant.MESSAGE_TYPE, Context.MODE_PRIVATE); + SharedPreferences sharedPreferences = requireActivity().getSharedPreferences(Constant.MESSAGE_TYPE, Context.MODE_PRIVATE); SharedPreferences.Editor sharedEdit = sharedPreferences.edit(); @SuppressLint("SimpleDateFormat") DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); @@ -392,7 +396,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList || fileListByUUID.get(i).getPath().endsWith(".jpg")|| fileListByUUID.get(i).getPath().endsWith(".jpeg")) { if (fileListByUUID.get(i).exists() && !isImageLoad) { // 使用glide加载视频的第一帧 - Glide.with(Objects.requireNonNull(getActivity())).load(fileListByUUID.get(i)).into(ivRoadPicture); + Glide.with(requireActivity()).load(fileListByUUID.get(i)).into(ivRoadPicture); isImageLoad = true; } } @@ -488,6 +492,13 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList fmRoadPic.setTag(fileListByUUID); } initRoadSharePre(); + } else if (data.what == Constant.EVENT_WHAT_FINISH_DRAW_LINE) { + // 显示原有抽屉画面 + changeSlidingLayout(View.VISIBLE, SlidingUpPanelLayout.PanelState.COLLAPSED); + if (data.arg1 == 1) { + List drawPoints = (List) data.obj; + showPoiEntity.setDrawLine(GeometryTools.getLineString(drawPoints)); + } } } @@ -601,10 +612,24 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList Constant.isPresent = false; } + break; + case R.id.tv_draw_line_road: + // 开始绘制辅助线,隐藏当前界面,展示地图,用户点击绘制线 + changeSlidingLayout(View.GONE, SlidingUpPanelLayout.PanelState.HIDDEN); + startDrawLine(); break; } } + /** + * 开始绘制参考线 + * */ + private void startDrawLine() { + Message drawMsg = Message.obtain(); + drawMsg.what = Constant.EVENT_WHAT_START_DRAW_LINE; + EventBus.getDefault().post(drawMsg); + } + public void initPoiSaveLocal(boolean isLocal) { XXPermissions.with(getContext()) .permission(Permission.MANAGE_EXTERNAL_STORAGE) @@ -627,7 +652,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList @Override public void run() { InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity); - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { + requireActivity().runOnUiThread(new Runnable() { @Override public void run() { if (isLocal) { @@ -649,7 +674,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList if (never) { ToastUtils.Message(getActivity(), "被永久拒绝授权,请手动授予权限"); // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(Objects.requireNonNull(getActivity()), permissions); + XXPermissions.startPermissionActivity(requireActivity(), permissions); } } }); @@ -826,7 +851,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList //表示文件名,系统将会在/dada/dada/包名/shared_prefs目录下生成 //一个以该参数命名的.xml文件。第二个mode表示创建的模式,通过查看 //方法注释得知,建议以0或者MODE_PRIVATE为默认值。 - SharedPreferences poi = Objects.requireNonNull(getActivity()).getSharedPreferences(Constant.DATA_FILE, 0); + SharedPreferences poi = requireActivity().getSharedPreferences(Constant.DATA_FILE, 0); //获取Editor对象 SharedPreferences.Editor edit = poi.edit(); //根据要保存的数据的类型,调用对应的put方法, diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 92b0f2f..ccc7526 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -111,6 +111,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.Polygon; import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions; import com.tencent.tencentmap.mapsdk.maps.model.Polyline; import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions; +import com.tencent.tencentmap.mapsdk.maps.model.TencentMapGestureListener; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; @@ -130,6 +131,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Consumer; import java.util.function.Predicate; /** @@ -183,6 +185,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen private TencentMarkerUtils tencentMarkerUtils; private ImageView imgAutoMatchRoad; // 自动匹配道路 private ImageView ivNaviDistance; // 按距离自动导航 + private List drawLineMarkerList = new ArrayList<>(); + private Polyline drawLinePolyline; public static TreasureFragment newInstance(Bundle bundle) { TreasureFragment fragment = new TreasureFragment(); @@ -387,73 +391,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } }); - // 内部测试功能 - ImageView imgViewSettingHook = findViewById(R.id.image_view); - imgViewSettingHook.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - View layer = findViewById(R.id.layer_visiable_setting); - if (layer.isShown()) { - return; - } - settingHookClickCount++; - if(lastClickTime > 0){ - long secondClickTime = System.currentTimeMillis();//距离上次开机时间 - long dtime = secondClickTime - lastClickTime; - if(dtime <800){ - if (settingHookClickCount>8) { - Toast.makeText(getContext(), "打开设置功能", Toast.LENGTH_SHORT).show(); - layer.setVisibility(View.VISIBLE); - } else { - if (settingHookClickCount>3) { - Toast.makeText(getContext(), "再点击"+(9-settingHookClickCount)+"下打开设置功能", Toast.LENGTH_SHORT).show(); - } - } - } else{ - lastClickTime = 0; - settingHookClickCount = 1; - } - } - lastClickTime = System.currentTimeMillis(); - } - }); -// Spinner spnBaseLocation = findViewById(R.id.spn_main_location); -// Spinner spnRefrenceLocation = findViewById(R.id.spn_reference_location); -// ArrayAdapter arrayAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, new String[]{"腾讯", "GPS"}); -// spnBaseLocation.setAdapter(arrayAdapter); -// spnRefrenceLocation.setAdapter(arrayAdapter); -// spnRefrenceLocation.setSelection(1); -// spnBaseLocation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { -// @Override -// public void onItemSelected(AdapterView adapterView, View view, int i, long l) { -// if (i == 0) { -// LocationLifeCycle.getInstance().setMainLocationFrom(LocationLifeCycle.LOCATION_FROM.TENCENT); -// } else if (i==1) { -// LocationLifeCycle.getInstance().setMainLocationFrom(LocationLifeCycle.LOCATION_FROM.ORIGIN); -// } -// } -// -// @Override -// public void onNothingSelected(AdapterView adapterView) { -// -// } -// }); -// -// spnRefrenceLocation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { -// @Override -// public void onItemSelected(AdapterView adapterView, View view, int i, long l) { -// if (i == 0) { -// LocationLifeCycle.getInstance().setReferenceLocationFrom(LocationLifeCycle.LOCATION_FROM.TENCENT); -// } else if (i==1) { -// LocationLifeCycle.getInstance().setReferenceLocationFrom(LocationLifeCycle.LOCATION_FROM.ORIGIN); -// } -// } -// -// @Override -// public void onNothingSelected(AdapterView adapterView) { -// -// } -// }); } /** @@ -1132,6 +1069,116 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen tvTenantGaps.setText("信号强度:强"); } } + } else if (data.what == Constant.EVENT_WHAT_CHANGE_SLIDING_STATE) { // 改变滑动窗口的状态 + if (sliding_layout!=null) { + if (data.arg1 == View.GONE || data.arg1 == View.INVISIBLE) { + sliding_layout.setPanelHeight(0); + } else { + int[] deviceInfo = DensityUtil.getDeviceInfo(getActivity()); + sliding_layout.setPanelHeight(deviceInfo[1] / 2); + } + sliding_layout.setPanelState((SlidingUpPanelLayout.PanelState) data.obj); + } + } else if (data.what == Constant.EVENT_WHAT_START_DRAW_LINE) { // 开始绘制参考线 + // 界面显示绘制结束按钮 + TextView drawFinish = findViewById(R.id.tv_draw_line_finish); + TextView drawCancel = findViewById(R.id.tv_draw_line_cancel); + drawFinish.setVisibility(View.VISIBLE); + drawCancel.setVisibility(View.VISIBLE); + drawFinish.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // 检查当前线型的点位数据,如果小于2个点,无法完成 + if (drawLinePolyline.getPoints()==null||drawLinePolyline.getPoints().size()<2) { + // 绘制的线不存在 + ToastUtils.Message(getActivity(), "绘制的线不存在!"); + return; + } + Message drawLineFinishMsg = Message.obtain(); + drawLineFinishMsg.what = Constant.EVENT_WHAT_FINISH_DRAW_LINE; + drawLineFinishMsg.obj = drawLinePolyline.getPoints(); + drawLineFinishMsg.arg1=1; // arg1为1代表存在绘制的辅助线,为0代表用户点击取消,不需要辅助线 + EventBus.getDefault().post(drawLineFinishMsg); + + drawFinish.setVisibility(View.GONE); + drawCancel.setVisibility(View.GONE); + tencentMap.setOnMapClickListener(null); + if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) { + drawLineMarkerList.stream().forEach(new Consumer() { + @Override + public void accept(Marker marker) { + marker.remove(); + } + }); + drawLineMarkerList.clear(); + } + + if (drawLinePolyline!=null) { + drawLinePolyline.remove(); + } + } + }); + drawCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Message drawLineFinishMsg = Message.obtain(); + drawLineFinishMsg.what = Constant.EVENT_WHAT_FINISH_DRAW_LINE; + drawLineFinishMsg.arg1=0;// arg1为1代表存在绘制的辅助线,为0代表用户点击取消,不需要辅助线 + EventBus.getDefault().post(drawLineFinishMsg); + + drawFinish.setVisibility(View.GONE); + drawCancel.setVisibility(View.GONE); + tencentMap.setOnMapClickListener(null); + if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) { + drawLineMarkerList.stream().forEach(new Consumer() { + @Override + public void accept(Marker marker) { + marker.remove(); + } + }); + drawLineMarkerList.clear(); + } + + if (drawLinePolyline!=null) { + drawLinePolyline.remove(); + } + } + }); + if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) { + drawLineMarkerList.stream().forEach(new Consumer() { + @Override + public void accept(Marker marker) { + marker.remove(); + } + }); + drawLineMarkerList.clear(); + } + + if (drawLinePolyline!=null) { + drawLinePolyline.remove(); + } + PolylineOptions drawLineOptions = new PolylineOptions() // 用户绘制参考线的线数据 + // 折线设置圆形线头 + .lineCap(true) + // 折线的颜色为绿色 + .color(0xff00ff00) + .borderColor(0xff00ff00) + // 折线宽度为25像素 + .width(12) + // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` + .borderWidth(5); + drawLinePolyline = tencentMap.addPolyline(drawLineOptions); + if (tencentMap!=null) { + tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() { + @Override + public void onMapClick(LatLng latLng) { + drawLinePolyline.appendPoint(latLng); + drawLineMarkerList.add(tencentMap.addMarker(new MarkerOptions(latLng).icon( + BitmapDescriptorFactory.fromResource(R.drawable.green_point) + ))); + } + }); + } } } diff --git a/app/src/main/res/drawable-xhdpi/green_point.png b/app/src/main/res/drawable-xhdpi/green_point.png new file mode 100644 index 0000000000000000000000000000000000000000..e70c6f905f82312193e503622bbc3302cab9386e GIT binary patch literal 1180 zcmV;N1Y`S&P)a@n%k=CVzab-*XK=WKV_s@W=JopnHvMayNo8H^n0lV{bBO^r~(y~2=!y|c=5 z_;G|Sg9e6rwk_C| zYTQpWCw?+5Nywy}#F-Rpi&0(igDRQxHx^aem(P$R#GSJEahz>|s%r~;reh!ep;OJ5 zsM+6cX-Gyo5~$dnPn$UUZd?z=jemKtzZAu zXor)2Pbs1T*DreY6E=?$r3BeS^gph|1cKkFO$9+gjjrmWMe5Z5Y= zBXn53Tx`7_H8H?R=7x_@zU`XA47HkmZ8}TQ27JJm77}uGL1pR-miEU1Okk^k5BSnh zrsfd#p;i>W2K_X(exs#0GsNbgb?!VWzbo+@2wud^iP=h$Q_PuoeE!%}+RM>EU-gLEu<$*8w%y-UFRm<>~ zWvfz^x6abYgc73z-!5>QI9seKU!}KJFJ?o~Y*niDy)Y$M>&^`;MqviGDRM70ZD;T~ z+fLdR@vQTWDS^k8ZF%BaY1`2GRxeJ0Ag3y|%UwGhvf?LM7L*x3(X@@hr_&zIrS0dV zN~D0GA3-OP&ogGI^F6mrjxb;bgU>byda6okabryh5NE8yN?U`^rw~-5O0z7?kF(7c z^q`~Bv|WA2OVQR0GkeanyAV{ZN;wHxrUaeAE-K)lcR!3M2wvH+U$ixY!Dn@^tz$}k zF}3);rbGyk>v`)~mAr_i4NVbskG?d~-z`_gxu>67N3uE(-C~=Em;G890f}QpFF{h&9_miw zD8^=|zf!k~l{8oY7dXK!al@F!hT6+EQFjt2IvyUsfzG9F8PG&WUvPj+6Z1s+qOgKw zCh1Wl1>pa_H~lE>7*jyWoE}>R+M*Bo8s-eRJ$fpw5cc*X++_n!mo>fyaoO-G@SpgW z6f;6zHl&FNyd*J84|@8XDGlMvT##&tV;}OS!MKhok&B1=5){dW)v|tGSlyC+BfGGQ u0NDGm^z>fE|SZ0000 + + + + - - + - - - - - - - - + android:layout_margin="@dimen/default_widget_padding" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + +