Commit 05f9cba9a6734213732d28f26a727d224d01d604

Authored by 杨帅
1 parent 0fe73493

1 修改查询历史轨迹逻辑,减少高并发

moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunRaceDetailFragmentView.java
@@ -89,9 +89,6 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen @@ -89,9 +89,6 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen
89 private LatLng endLatLng; 89 private LatLng endLatLng;
90 private final int START_MARK = 0;//起始点 90 private final int START_MARK = 0;//起始点
91 private final int END_MARK = 1;//终止点 91 private final int END_MARK = 1;//终止点
92 -  
93 - private String startPoint = "首都师范大学南门";  
94 - private String endPoint = "首都师范大学篮球场";  
95 private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8}]"; 92 private String test = "[{\"latitude\":39.933889208848,\"latitudeE6\":3.9933889208848E7,\"longitude\":116.30900265517,\"longitudeE6\":1.1630900265517001E8},{\"latitude\":39.933868507347,\"latitudeE6\":3.9933868507347E7,\"longitude\":116.30865416508,\"longitudeE6\":1.1630865416508E8},{\"latitude\":39.934756505077,\"latitudeE6\":3.9934756505077E7,\"longitude\":116.30860516469,\"longitudeE6\":1.1630860516468999E8},{\"latitude\":39.934781620502,\"latitudeE6\":3.9934781620502E7,\"longitude\":116.30961013007,\"longitudeE6\":1.1630961013007E8},{\"latitude\":39.934881620374,\"latitudeE6\":3.9934881620374E7,\"longitude\":116.30960513008,\"longitudeE6\":1.1630960513008E8},{\"latitude\":39.934077623132,\"latitudeE6\":3.9934077623132E7,\"longitude\":116.30965812942,\"longitudeE6\":1.1630965812942E8},{\"latitude\":39.933972618463,\"latitudeE6\":3.9933972618463E7,\"longitude\":116.30962113087,\"longitudeE6\":1.1630962113087E8},{\"latitude\":39.933932608856,\"latitudeE6\":3.9933932608856E7,\"longitude\":116.30953913383,\"longitudeE6\":1.1630953913383E8}]";
96 private LinkedList<LatLng> importLatLngs;//关键点 93 private LinkedList<LatLng> importLatLngs;//关键点
97 private LatLng startLatLng = new LatLng(39.934733, 116.308646);//起始点 94 private LatLng startLatLng = new LatLng(39.934733, 116.308646);//起始点
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningFinishFragmentView.java
1 package com.cnlive.moudle.collectionTrace.frame.view; 1 package com.cnlive.moudle.collectionTrace.frame.view;
2 2
3 import android.content.Context; 3 import android.content.Context;
  4 +import android.graphics.Bitmap;
  5 +import android.graphics.BitmapFactory;
4 import android.support.v7.widget.LinearLayoutManager; 6 import android.support.v7.widget.LinearLayoutManager;
5 import android.text.TextUtils; 7 import android.text.TextUtils;
6 import android.view.View; 8 import android.view.View;
7 9
  10 +import com.baidu.location.LocationClient;
  11 +import com.baidu.location.LocationClientOption;
  12 +import com.baidu.mapapi.map.BaiduMap;
  13 +import com.baidu.mapapi.map.BitmapDescriptorFactory;
  14 +import com.baidu.mapapi.map.MapView;
  15 +import com.baidu.mapapi.map.MyLocationConfiguration;
  16 +import com.baidu.mapapi.map.Overlay;
  17 +import com.baidu.mapapi.map.UiSettings;
  18 +import com.baidu.mapapi.model.LatLng;
  19 +import com.baidu.trace.LBSTraceClient;
  20 +import com.baidu.trace.model.SortType;
8 import com.cnlive.moudle.collectionTrace.model.CollectPoint; 21 import com.cnlive.moudle.collectionTrace.model.CollectPoint;
9 import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter; 22 import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter;
10 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningFinishFragment; 23 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningFinishFragment;
@@ -13,9 +26,12 @@ import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; @@ -13,9 +26,12 @@ import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
13 import com.cnlive.moudle.pedometer.model.RunningFinishBean; 26 import com.cnlive.moudle.pedometer.model.RunningFinishBean;
14 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity; 27 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
15 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment; 28 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment;
  29 +import com.cnlive.moudle.pedometer.utils.BitmapUtil;
16 import com.cnlive.moudle.pedometer.utils.GsonUtil; 30 import com.cnlive.moudle.pedometer.utils.GsonUtil;
  31 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
17 import com.cnlive.moudle.pedometer.utils.TimeUtil; 32 import com.cnlive.moudle.pedometer.utils.TimeUtil;
18 import com.cnlive.strike.application.GlideApp; 33 import com.cnlive.strike.application.GlideApp;
  34 +import com.example.moudle_pedometer.R;
19 import com.hannesdorfmann.mosby3.mvp.MvpView; 35 import com.hannesdorfmann.mosby3.mvp.MvpView;
20 36
21 import java.util.ArrayList; 37 import java.util.ArrayList;
@@ -24,6 +40,11 @@ import java.util.List; @@ -24,6 +40,11 @@ import java.util.List;
24 public class CollRunningFinishFragmentView implements MvpView { 40 public class CollRunningFinishFragmentView implements MvpView {
25 private CollRunningFinishFragment fragment; 41 private CollRunningFinishFragment fragment;
26 private CollFinishDetaiAdapter adapter; 42 private CollFinishDetaiAdapter adapter;
  43 + public BaiduMap baiduMap;
  44 + private MapView mMapView;
  45 + private UiSettings mUiSettings;
  46 + private LBSTraceClient mClient = null;
  47 + private List<Overlay> allMapOverlays;
27 48
28 public CollRunningFinishFragmentView(CollRunningFinishFragment fragment) { 49 public CollRunningFinishFragmentView(CollRunningFinishFragment fragment) {
29 this.fragment = fragment; 50 this.fragment = fragment;
@@ -34,6 +55,40 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -34,6 +55,40 @@ public class CollRunningFinishFragmentView implements MvpView {
34 } 55 }
35 56
36 public void initView(CollUserStepEntity collUserStepEntity) { 57 public void initView(CollUserStepEntity collUserStepEntity) {
  58 + allMapOverlays = new ArrayList<>();
  59 + //查询用户历史轨迹
  60 + if (0 != collUserStepEntity.getStartTimeStamp() && 0 != collUserStepEntity.getFinishTimeStamp()) {
  61 + long startTime = collUserStepEntity.getStartTimeStamp();
  62 + long endTime = collUserStepEntity.getFinishTimeStamp();
  63 + //开始查询
  64 + MyMapUtil.queryHistoryTrace(getContext(), mClient, CommonInfo.getUserId(getContext()), startTime, endTime, new MyMapUtil.CallBack() {
  65 + @Override
  66 + public void success(List<LatLng> resultPoints) {
  67 + if (null != resultPoints && resultPoints.size() > 1) {
  68 + //绘制轨迹
  69 + MyMapUtil.drawHistoryTrack(getContext(), baiduMap, resultPoints, SortType.asc, R.color.green_round, R.drawable.icon_start, R.drawable.icon_end);
  70 + }
  71 + }
  72 + });
  73 + if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
  74 + List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
  75 + //绘制运营打的点
  76 + if (null != collectPoints) {
  77 + //根据打点集合,自适应缩放
  78 + MyMapUtil.setCollMapAutoZoom(baiduMap, collectPoints, -1.5f);
  79 + for (CollectPoint point : collectPoints) {
  80 + LatLng markLatLng = new LatLng(point.getLatitude(), point.getLongitude());
  81 + if (null != markLatLng) {
  82 + //将点位显示到地图上
  83 + Overlay overlay = MyMapUtil.setMapMarker(getContext(), baiduMap, markLatLng, R.drawable.icon_map_import);
  84 + if (null != overlay) {
  85 + allMapOverlays.add(overlay);
  86 + }
  87 + }
  88 + }
  89 + }
  90 + }
  91 + }
37 //设置用户昵称 92 //设置用户昵称
38 String nickName = CommonInfo.getUserNickName(getContext()); 93 String nickName = CommonInfo.getUserNickName(getContext());
39 fragment.binding.includeFinishUserInfo.tvUserNickName.setText(nickName); 94 fragment.binding.includeFinishUserInfo.tvUserNickName.setText(nickName);
@@ -94,4 +149,86 @@ public class CollRunningFinishFragmentView implements MvpView { @@ -94,4 +149,86 @@ public class CollRunningFinishFragmentView implements MvpView {
94 } 149 }
95 }); 150 });
96 } 151 }
  152 +
  153 +
  154 + public void initMap() {
  155 + this.mMapView = fragment.binding.mapView;
  156 + if (baiduMap == null) {
  157 + baiduMap = mMapView.getMap();
  158 + }
  159 + if (mUiSettings == null) {
  160 + mUiSettings = baiduMap.getUiSettings();
  161 + }
  162 + if (mClient == null) {
  163 + mClient = new LBSTraceClient(getContext());
  164 + }
  165 + //启动所有手势
  166 + mUiSettings.setAllGesturesEnabled(true);
  167 + //通过设置enable为true或false 选择是否显示缩放按钮
  168 + mMapView.showZoomControls(false);
  169 + mUiSettings.setEnlargeCenterWithDoubleClickEnable(true);
  170 + //隐藏自带的指南针,改用自定义指南针 杨帅
  171 + mUiSettings.setCompassEnabled(false);
  172 + //显示定位图层
  173 + baiduMap.setMyLocationEnabled(false);
  174 + LocationClientOption option = new LocationClientOption();
  175 + option.setOpenGps(true); // 打开gps
  176 + //可选,设置返回经纬度坐标类型,默认GCJ02
  177 + //GCJ02:国测局坐标;
  178 + //BD09ll:百度经纬度坐标;
  179 + //BD09:百度墨卡托坐标;
  180 + //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
  181 + option.setCoorType("gcj02"); // 设置坐标类型
  182 + //可选,默认false,设置是否开启Gps定位
  183 + option.setOpenGps(true);
  184 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
  185 + option.setOpenAutoNotifyMode();
  186 + //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  187 + //LocationMode.Hight_Accuracy:高精度;
  188 + //LocationMode. Battery_Saving:低功耗;
  189 + //LocationMode. Device_Sensors:仅使用设备;
  190 + option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
  191 + //可选,设置是否需要地址信息,默认不需要
  192 + option.setIsNeedAddress(false);
  193 + //可选,设置是否需要地址描述
  194 + option.setIsNeedLocationDescribe(false);
  195 + //可选,设置是否需要设备方向结果
  196 + option.setNeedDeviceDirect(false);
  197 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
  198 + //minTimeInterval - 最短定位时间间隔,单位毫秒,最小值0,开发者可以在设置希望的位置回调最短时间间隔
  199 + //minDistance - 最短定位距离间隔,单位米,最小值0,开发者可以设置希望的位置回调距离间隔
  200 + //locSensitivity - 定位变化敏感程度,LOC_SENSITIVITY_HIGHT,LOC_SENSITIVITY_MIDDLE,LOC_SENSITIVITY_LOW
  201 + option.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
  202 + //可选,定位SDK内部是一个service,并放到了独立进程。
  203 + //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
  204 + option.setIgnoreKillProcess(true);
  205 +
  206 + }
  207 +
  208 + public void onResume() {
  209 + if (null != mMapView) {
  210 + mMapView.onResume();
  211 + }
  212 + }
  213 +
  214 + public void onPause() {
  215 + if (null != mMapView) {
  216 + mMapView.onPause();
  217 + }
  218 + }
  219 +
  220 + public void onDestroy() {
  221 + if (null != allMapOverlays) {
  222 + for (Overlay overlay : allMapOverlays) {
  223 + overlay.remove();
  224 + }
  225 + allMapOverlays = null;
  226 + baiduMap.clear();
  227 + }
  228 +
  229 + if (mMapView != null) {
  230 + mMapView.onDestroy();
  231 + mMapView = null;
  232 + }
  233 + }
97 } 234 }
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningMapFragmentView.java
@@ -100,7 +100,9 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener @@ -100,7 +100,9 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
100 } 100 }
101 101
102 public void initView(RunRaceDetailInfo runRaceDetailInfo) { 102 public void initView(RunRaceDetailInfo runRaceDetailInfo) {
  103 + //初始化打点提示框
103 initSelectDialog(); 104 initSelectDialog();
  105 + //初始化结束打点提示框
104 initFinishSelectDialog(); 106 initFinishSelectDialog();
105 this.runRaceDetailInfo = runRaceDetailInfo; 107 this.runRaceDetailInfo = runRaceDetailInfo;
106 uid = CollCommonInfo.getUserId(getContext()); 108 uid = CollCommonInfo.getUserId(getContext());
@@ -763,6 +765,13 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener @@ -763,6 +765,13 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
763 } 765 }
764 766
765 public void onDestroy() { 767 public void onDestroy() {
  768 + if (null != allMapOverlays) {
  769 + for (Overlay overlay : allMapOverlays) {
  770 + overlay.remove();
  771 + }
  772 + allMapOverlays = null;
  773 + baiduMap.clear();
  774 + }
766 if (mMapView != null) { 775 if (mMapView != null) {
767 mMapView.onDestroy(); 776 mMapView.onDestroy();
768 mMapView = null; 777 mMapView = null;
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/CollRunningFinishFragment.java
@@ -48,6 +48,9 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra @@ -48,6 +48,9 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra
48 @Override 48 @Override
49 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 49 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
50 super.onViewCreated(view, savedInstanceState); 50 super.onViewCreated(view, savedInstanceState);
  51 + if (null != getMvpView()) {
  52 + getMvpView().initMap();
  53 + }
51 CollUserStepEntity collUserStepEntity = CollStepUtil.getCollUserStepData(getContext(), CommonInfo.getUserId(getContext())); 54 CollUserStepEntity collUserStepEntity = CollStepUtil.getCollUserStepData(getContext(), CommonInfo.getUserId(getContext()));
52 if (collUserStepEntity != null) { 55 if (collUserStepEntity != null) {
53 if (getMvpView() != null) { 56 if (getMvpView() != null) {
@@ -67,4 +70,28 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra @@ -67,4 +70,28 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra
67 return 0; 70 return 0;
68 71
69 } 72 }
  73 +
  74 + @Override
  75 + public void onResume() {
  76 + super.onResume();
  77 + if (null != getMvpView()) {
  78 + getMvpView().onResume();
  79 + }
  80 + }
  81 +
  82 + @Override
  83 + public void onPause() {
  84 + super.onPause();
  85 + if (null != getMvpView()) {
  86 + getMvpView().onPause();
  87 + }
  88 + }
  89 +
  90 + @Override
  91 + public void onDestroy() {
  92 + super.onDestroy();
  93 + if (null != getMvpView()) {
  94 + getMvpView().onPause();
  95 + }
  96 + }
70 } 97 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningFinishFragmentView.java
@@ -9,6 +9,7 @@ import com.baidu.mapapi.map.BaiduMap; @@ -9,6 +9,7 @@ import com.baidu.mapapi.map.BaiduMap;
9 import com.baidu.mapapi.map.MapView; 9 import com.baidu.mapapi.map.MapView;
10 import com.baidu.mapapi.map.UiSettings; 10 import com.baidu.mapapi.map.UiSettings;
11 import com.baidu.mapapi.model.LatLng; 11 import com.baidu.mapapi.model.LatLng;
  12 +import com.baidu.trace.LBSTraceClient;
12 import com.baidu.trace.model.SortType; 13 import com.baidu.trace.model.SortType;
13 import com.bumptech.glide.Glide; 14 import com.bumptech.glide.Glide;
14 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo; 15 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
@@ -31,7 +32,6 @@ public class RunningFinishFragmentView implements MvpView { @@ -31,7 +32,6 @@ public class RunningFinishFragmentView implements MvpView {
31 public BaiduMap baiduMap; 32 public BaiduMap baiduMap;
32 private MapView mMapView; 33 private MapView mMapView;
33 private UiSettings mUiSettings; 34 private UiSettings mUiSettings;
34 -  
35 public RunningFinishFragmentView(RunningFinishFragment fragment) { 35 public RunningFinishFragmentView(RunningFinishFragment fragment) {
36 this.fragment = fragment; 36 this.fragment = fragment;
37 } 37 }
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
@@ -32,6 +32,7 @@ import com.baidu.trace.model.ProcessOption; @@ -32,6 +32,7 @@ import com.baidu.trace.model.ProcessOption;
32 import com.baidu.trace.model.SortType; 32 import com.baidu.trace.model.SortType;
33 import com.baidu.trace.model.StatusCodes; 33 import com.baidu.trace.model.StatusCodes;
34 import com.baidu.trace.model.TransportMode; 34 import com.baidu.trace.model.TransportMode;
  35 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
35 import com.cnlive.moudle.pedometer.model.Constant; 36 import com.cnlive.moudle.pedometer.model.Constant;
36 import com.cnlive.moudle.pedometer.model.RoutePoint; 37 import com.cnlive.moudle.pedometer.model.RoutePoint;
37 import com.cnlive.moudle.pedometer.service.StepService; 38 import com.cnlive.moudle.pedometer.service.StepService;
@@ -160,6 +161,33 @@ public class MyMapUtil { @@ -160,6 +161,33 @@ public class MyMapUtil {
160 } 161 }
161 162
162 /** 163 /**
  164 + * 根据点位信息,自动缩放地图
  165 + *
  166 + * @param baiduMap
  167 + * @param trackPoints
  168 + * @param zoomBy
  169 + */
  170 + public static void setCollMapAutoZoom(BaiduMap baiduMap, List<CollectPoint> trackPoints, float zoomBy) {
  171 + LatLngBounds.Builder builder = new LatLngBounds.Builder();
  172 + List<LatLng> latLngs = new ArrayList<>();
  173 + for (int i = 0; i < trackPoints.size(); i++) {
  174 + latLngs.add(new LatLng(trackPoints.get(i).getLatitude(), trackPoints.get(i).getLongitude()));
  175 + }
  176 + for (LatLng latLng : latLngs) {
  177 + builder.include(latLng);
  178 + }
  179 + MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(builder.build());
  180 + baiduMap.setMapStatus(mapStatusUpdate);
  181 + MapStatusUpdate msu = MapStatusUpdateFactory.zoomBy(zoomBy);
  182 + baiduMap.setMapStatus(msu);
  183 + //自动计算地图缩放
  184 +// MapStatus.Builder builder = new MapStatus.Builder();
  185 +// builder.target(MyMapUtil.getCenterZoomPosition(trackPoints));
  186 +// builder.zoom(MyMapUtil.getZoom(trackPoints));
  187 +// baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
  188 + }
  189 +
  190 + /**
163 * 判断用户是否完成比赛 191 * 判断用户是否完成比赛
164 * 192 *
165 * @param importPoints 193 * @param importPoints
@@ -266,8 +294,8 @@ public class MyMapUtil { @@ -266,8 +294,8 @@ public class MyMapUtil {
266 @Override 294 @Override
267 public void run() { 295 public void run() {
268 // //间隔3秒查一次 296 // //间隔3秒查一次
269 - queryHistoryTrace(context, mClient, entityName, startTime, endTime, callBack);  
270 - queryNum++; 297 + queryHistoryTrace(context, mClient, entityName, startTime, endTime, callBack);
  298 + queryNum++;
271 } 299 }
272 }, 1000); 300 }, 1000);
273 } 301 }
@@ -359,18 +387,21 @@ public class MyMapUtil { @@ -359,18 +387,21 @@ public class MyMapUtil {
359 /** 387 /**
360 * 绘制历史轨迹 388 * 绘制历史轨迹
361 */ 389 */
362 - public static Overlay drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) { 390 + public static List<Overlay> drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
363 // 绘制新覆盖物前,清空之前的覆盖物 391 // 绘制新覆盖物前,清空之前的覆盖物
364 if (points == null || points.size() == 0 || lineColor == 0) { 392 if (points == null || points.size() == 0 || lineColor == 0) {
365 return null; 393 return null;
366 } 394 }
  395 + List<Overlay> overlayList = new ArrayList<>();
367 //只有一个点 396 //只有一个点
368 if (points.size() == 1) { 397 if (points.size() == 1) {
369 if (startIconRes != 0) { 398 if (startIconRes != 0) {
370 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30); 399 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
371 OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap)); 400 OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
372 -// .zIndex(9).draggable(true);  
373 - return baiduMap.addOverlay(startOptions); 401 + if (null != startOptions) {
  402 + overlayList.add(baiduMap.addOverlay(startOptions));
  403 + }
  404 + return overlayList;
374 } else { 405 } else {
375 return null; 406 return null;
376 } 407 }
@@ -391,8 +422,10 @@ public class MyMapUtil { @@ -391,8 +422,10 @@ public class MyMapUtil {
391 OverlayOptions startOptions = null; 422 OverlayOptions startOptions = null;
392 if (startIconRes != 0) { 423 if (startIconRes != 0) {
393 startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30); 424 startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
394 - startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)  
395 - .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap)); 425 + if (null != startPointBitmap && null != startPoint) {
  426 + startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  427 + .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  428 + }
396 } 429 }
397 // .zIndex(9).draggable(true); 430 // .zIndex(9).draggable(true);
398 // 添加终点图标 431 // 添加终点图标
@@ -400,21 +433,35 @@ public class MyMapUtil { @@ -400,21 +433,35 @@ public class MyMapUtil {
400 OverlayOptions endOptions = null; 433 OverlayOptions endOptions = null;
401 if (endIconRes != 0) { 434 if (endIconRes != 0) {
402 endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 24, 30); 435 endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 24, 30);
403 - endOptions = new MarkerOptions().position(endPoint).perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)  
404 - .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap)); 436 + if (null != endPointBitmap && null != endPoint) {
  437 + endOptions = new MarkerOptions().position(endPoint).perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  438 + .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  439 + }
405 } 440 }
406 // .zIndex(9).draggable(true); 441 // .zIndex(9).draggable(true);
407 442
408 // 添加路线(轨迹) 443 // 添加路线(轨迹)
409 - OverlayOptions polylineOptions = new PolylineOptions().width(10)  
410 - .color(context.getResources().getColor(lineColor)).points(points); 444 + OverlayOptions polylineOptions = null;
  445 + if (null != points) {
  446 + polylineOptions = new PolylineOptions().width(10)
  447 + .color(context.getResources().getColor(lineColor)).points(points);
  448 + }
411 if (startOptions != null) { 449 if (startOptions != null) {
412 - baiduMap.addOverlay(startOptions); 450 + overlayList.add(baiduMap.addOverlay(startOptions));
413 } 451 }
414 if (endOptions != null) { 452 if (endOptions != null) {
415 - baiduMap.addOverlay(endOptions); 453 + overlayList.add(baiduMap.addOverlay(endOptions));
  454 + }
  455 + if (null != polylineOptions) {
  456 + overlayList.add(baiduMap.addOverlay(polylineOptions));
  457 + }
  458 + if (null != overlayList) {
  459 + return overlayList;
  460 + } else if (overlayList.size() == 0) {
  461 + return null;
  462 + } else {
  463 + return null;
416 } 464 }
417 - return baiduMap.addOverlay(polylineOptions);  
418 } 465 }
419 466
420 /** 467 /**