Commit f1ddb047a76d6324e2c91630870cf5d41d7300b8

Authored by 韩亚云
2 parents 2ead4fec 97f82ce4

Merge branch 'master' of bj.gitlab.cnlive.com:cnlive-team/ModulePedometer

Showing 42 changed files with 2678 additions and 412 deletions
app/build.gradle
... ... @@ -28,15 +28,16 @@ android {
28 28 buildConfigField("String", "APP_ID", stringValue("802_jhbqccxw08"))
29 29 buildConfigField("String", "APP_KEY", stringValue("9c5619e9be747bb3b925dd215ca5923d86f12c09b9394f"))
30 30 buildConfigField("String", "APP_SCERET", stringValue("1e6380cb347255e777f72b5aa60f41daa68443a132aaea"))
31   -// BAIDU_MAP_APP_KEY: "OeotXc38bbnU7WmyKGA0VMahk4v35VG2"
32   - manifestPlaceholders = [
  31 +// BAIDU_MAP_APP_KEY: "OeotXc38bbnU7WmyKGA0VMahk4v35VG2" //测试
33 32  
34   - BAIDU_MAP_APP_KEY: "2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN"
  33 + manifestPlaceholders = [
35 34  
  35 +// BAIDU_MAP_APP_KEY: "2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN"
  36 + BAIDU_MAP_APP_KEY: "OeotXc38bbnU7WmyKGA0VMahk4v35VG2"
36 37  
37 38 ]
38 39 }
39   -// BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"
  40 +// BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"//正式
40 41 // BAIDU_MAP_APP_KEY: "0bWeo04KKKHqTwozcqgyLZVd0oVhv3rZ"
41 42  
42 43 release {
... ... @@ -45,7 +46,8 @@ android {
45 46 buildConfigField("String", "APP_KEY", stringValue("0d57b045ec0c3988a682d94c644e66b9b8e0d2b8ef937d"))
46 47 buildConfigField("String", "APP_SCERET", stringValue("275e8dc29274a1186d82f65bc607c231d02bcb3bfd8976"))
47 48 manifestPlaceholders = [
48   - BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"
  49 +// BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"
  50 + BAIDU_MAP_APP_KEY: "0bWeo04KKKHqTwozcqgyLZVd0oVhv3rZ"
49 51 ]
50 52 }
51 53 }
... ...
app/src/main/java/com/example/modulepedometer/MainActivity.java
... ... @@ -6,6 +6,7 @@ import android.support.v7.app.AppCompatActivity;
6 6 import android.view.View;
7 7  
8 8 import com.cnlive.moudle.collectionTrace.ui.activity.CollRunRaceDetailActivity;
  9 +import com.cnlive.moudle.collectionTrace.ui.activity.CollRunningFinishActivity;
9 10 import com.cnlive.moudle.collectionTrace.ui.activity.RaceListActivity;
10 11 import com.cnlive.moudle.collectionTrace.ui.activity.RaceNameListActivity;
11 12 import com.cnlive.moudle.pedometer.ui.activity.MyRecordActivity;
... ... @@ -32,13 +33,14 @@ public class MainActivity extends AppCompatActivity {
32 33 public void onClick(View v) {
33 34 Intent intent = new Intent(MainActivity.this, RaceListActivity.class);
34 35 startActivity(intent);
  36 + //跳转界面
  37 +// CollRunningFinishActivity.startActivity(MainActivity.this);
35 38 }
36 39 });
37 40 findViewById(R.id.tool2).setOnClickListener(new View.OnClickListener() {
38 41 @Override
39 42 public void onClick(View v) {
40 43 SelfRecordActivity.newInstance(MainActivity.this, "10513196",null,null,null);
41   -// startActivity(intent);
42 44 }
43 45 });
44 46  
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/commonInfo/CollCommonInfo.java
... ... @@ -155,6 +155,49 @@ public class CollCommonInfo {
155 155 return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getBoolean("CollFirstStepSendTraceTip", true);
156 156 }
157 157  
  158 + /**
  159 + * 设置用户昵称
  160 + *
  161 + * @param context
  162 + * @param nickName
  163 + */
  164 + public static void setUserNickName(Context context, String nickName) {
  165 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putString("CollRunUserNickName", nickName);
  166 +
  167 + }
  168 +
  169 + /**
  170 + * 获取用户昵称
  171 + *
  172 + * @param context
  173 + */
  174 + public static String getUserNickName(Context context) {
  175 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getString("CollRunUserNickName", "");
  176 +
  177 + }
  178 +
  179 + /**
  180 + * 设置用户头像
  181 + *
  182 + * @param context
  183 + * @param userIcon
  184 + */
  185 + public static void setUserIcon(Context context, String userIcon) {
  186 + MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).putString("CollRunUserNickIcon", userIcon);
  187 +
  188 + }
  189 +
  190 + /**
  191 + * 获取用户头像
  192 + *
  193 + * @param context
  194 + */
  195 + public static String getUserIcon(Context context) {
  196 + return MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).getString("CollRunUserNickIcon", "");
  197 +
  198 + }
  199 +
  200 +
158 201 /*重置
159 202 * @param context
160 203 */
... ... @@ -165,7 +208,6 @@ public class CollCommonInfo {
165 208 MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("CollstepStartTime");
166 209 MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("CollKeepAliveService");
167 210 MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("CollRunBaiduTraceService");
168   - MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("CollstreetId");
169 211 MySpHelper.getInstance(context, Context.MODE_MULTI_PROCESS).removeKey("CollFirstStepSendTraceTip");
170 212 }
171 213  
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/presenter/CollRunningFinishFragmetPresenter.java
1 1 package com.cnlive.moudle.collectionTrace.frame.presenter;
2 2  
  3 +import android.app.Activity;
  4 +import android.os.Handler;
  5 +import android.text.TextUtils;
  6 +import android.util.Log;
  7 +
  8 +import com.baidu.mapapi.map.Overlay;
  9 +import com.baidu.mapapi.model.LatLng;
  10 +import com.cnlive.libs.base.logic.Logic;
  11 +import com.cnlive.libs.base.logic.callback.DataCallback;
  12 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  13 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  14 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
3 15 import com.cnlive.moudle.collectionTrace.frame.view.CollRunningFinishFragmentView;
  16 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  17 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  18 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  19 +import com.cnlive.moudle.pedometer.net.ApiServiceRunLin;
  20 +import com.cnlive.moudle.pedometer.net.SubscriptionRequest;
  21 +import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
  22 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
  23 +import com.cnlive.moudle.pedometer.sql.entity.FailedEntity;
  24 +import com.cnlive.moudle.pedometer.ui.activity.LineUpAgainActivity;
  25 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  26 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  27 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  28 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  29 +import com.cnlive.moudle.pedometer.utils.StepUtil;
  30 +import com.example.moudle_pedometer.R;
4 31 import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
5 32  
  33 +import java.util.HashMap;
  34 +import java.util.List;
  35 +import java.util.Map;
  36 +
  37 +import io.reactivex.disposables.Disposable;
  38 +
6 39 public class CollRunningFinishFragmetPresenter extends MvpBasePresenter<CollRunningFinishFragmentView> {
  40 +
  41 + public void uploadTraceDateToServer(Activity context, CollUserStepEntity userStepEntity, String roadmap) {
  42 + QMUITipDialogUtil.loadingDialog(context, "正在上传数据", false);
  43 + Map<String, String> paramsMap = new HashMap<>();
  44 + //赛事id
  45 + if (!TextUtils.isEmpty(userStepEntity.getStreetId())) {
  46 + String eventId = userStepEntity.getStreetId();
  47 + paramsMap.put("eventId", eventId);
  48 + }
  49 + //踩点图
  50 + if (!TextUtils.isEmpty(roadmap)) {
  51 + paramsMap.put("roadmap", roadmap);
  52 + }
  53 + //运营人员sid
  54 + paramsMap.put("darenId", CollCommonInfo.getUserId(context));
  55 + if (!TextUtils.isEmpty(userStepEntity.getImportPoint())) {
  56 + List<CollectPoint> collectPoints = GsonUtil.jsonToList(userStepEntity.getImportPoint(), CollectPoint.class);
  57 + //绘制运营打的点
  58 + if (null != collectPoints) {
  59 + //根据打点集合,自适应缩放
  60 + CollectPoint startPoint = null;
  61 + if (!TextUtils.isEmpty(userStepEntity.getCollStartPointData())) {
  62 + startPoint = GsonUtil.GsonToBean(userStepEntity.getCollStartPointData(), CollectPoint.class);
  63 + }
  64 + CollectPoint endPoint = null;
  65 + if (!TextUtils.isEmpty(userStepEntity.getCollEndPointData())) {
  66 + endPoint = GsonUtil.GsonToBean(userStepEntity.getCollEndPointData(), CollectPoint.class);
  67 + }
  68 + if (null != startPoint) {
  69 + collectPoints.add(0, startPoint);
  70 + //起点
  71 + paramsMap.put("startLocation", startPoint.getPointName());
  72 + }
  73 + if (null != endPoint) {
  74 + collectPoints.add(endPoint);
  75 + // 终点
  76 + paramsMap.put("endLocation", endPoint.getPointName());
  77 +
  78 + }
  79 + // 经纬度
  80 + paramsMap.put("latLongitude", GsonUtil.GsonString(collectPoints));
  81 + }
  82 + }
  83 + //全程里数 mileage
  84 + if (!TextUtils.isEmpty(userStepEntity.getStepCount())) {
  85 + double mileage = CollStepUtil.getWalkDistanceKM(Long.parseLong(userStepEntity.getStepCount()));
  86 + paramsMap.put("mileage", mileage + "");
  87 + }
  88 + //开始时间
  89 + if (0 != userStepEntity.getStartTimeStamp()) {
  90 + paramsMap.put("startTime", userStepEntity.getStartTimeStamp() + "");
  91 + }
  92 + //结束时间
  93 + if (0 != userStepEntity.getFinishTimeStamp()) {
  94 + paramsMap.put("endTime", userStepEntity.getFinishTimeStamp() + "");
  95 + }
  96 + //实体名称
  97 + paramsMap.put("entityName", CollCommonInfo.getUserId(context));
  98 +
  99 + Logic.create(paramsMap).action(new Logic.Action<Map<String, String>, BaseInfo>() {
  100 + @Override
  101 + public Disposable action(Map<String, String> stringStringMap, DataCallback<BaseInfo> dataCallback) {
  102 + return SubscriptionRequest.service(ApiServiceRunLin.class, api -> api.collSaveShoeLine(stringStringMap)).subscribe(context, dataCallback);
  103 + }
  104 + }).<BaseInfo>event()
  105 + .setFailureCallback(new FailureCallback() {
  106 + @Override
  107 + public void onFailure(int code, String message) {
  108 + if (getView() == null) {
  109 + return;
  110 + }
  111 + QMUITipDialogUtil.dismessDialog();
  112 + SelectDialog selectDialog = new SelectDialog(context, "数据上传失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  113 + @Override
  114 + public void onClick(SelectDialog dialog) {
  115 + dialog.dismiss();
  116 + }
  117 + }, "重试", new SelectDialog.DialogInterface() {
  118 + @Override
  119 + public void onClick(SelectDialog dialog) {
  120 + dialog.dismiss();
  121 + uploadTraceDateToServer(context, userStepEntity, roadmap);
  122 + }
  123 + });
  124 + selectDialog.setCancelable(false);
  125 + selectDialog.setCanceledOnTouchOutside(false);
  126 + if (!selectDialog.isShowing()) {
  127 + selectDialog.show();
  128 + }
  129 + }
  130 + }).setSuccessCallback(new SuccessCallback<BaseInfo>() {
  131 + @Override
  132 + public void onSuccess(BaseInfo baseInfo) {
  133 + if (getView() == null) {
  134 + return;
  135 + }
  136 + QMUITipDialogUtil.dismessDialog();
  137 + QMUITipDialogUtil.successDialog(context, "数据上传成功", 1);
  138 + //清空数据
  139 + CollStepUtil.clearRunData(context, CollCommonInfo.getUserId(context));
  140 + CollCommonInfo.reset(context);
  141 + new Handler().postDelayed(new Runnable() {
  142 + @Override
  143 + public void run() {
  144 + if (null != context) {
  145 + context.finish();
  146 + }
  147 + }
  148 + }, 1000);
  149 + }
  150 + }).start();
  151 + }
7 152 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/presenter/CollTraceListDetailFragmentPresenter.java 0 → 100644
  1 +package com.cnlive.moudle.collectionTrace.frame.presenter;
  2 +
  3 +import com.cnlive.moudle.collectionTrace.frame.view.CollTraceListDetailFragmentView;
  4 +import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
  5 +
  6 +public class CollTraceListDetailFragmentPresenter extends MvpBasePresenter<CollTraceListDetailFragmentView> {
  7 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunRaceDetailFragmentView.java
... ... @@ -89,14 +89,11 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen
89 89 private LatLng endLatLng;
90 90 private final int START_MARK = 0;//起始点
91 91 private final int END_MARK = 1;//终止点
92   -
93   - private String startPoint = "首都师范大学南门";
94   - private String endPoint = "首都师范大学篮球场";
95 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 93 private LinkedList<LatLng> importLatLngs;//关键点
97 94 private LatLng startLatLng = new LatLng(39.934733, 116.308646);//起始点
98 95 private List<LatLng> trackPoints;
99   - private RunRaceDetailInfo runRaceDetailInfo;
  96 + public RunRaceDetailInfo runRaceDetailInfo;
100 97  
101 98 public CollRunRaceDetailFragmentView(CollRunRaceDetailFragment fragment) {
102 99 this.fragment = fragment;
... ... @@ -135,22 +132,48 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen
135 132 if (!TextUtils.isEmpty(runRaceDetailInfo.getTitle())) {
136 133 fragment.binding.includeStreet.tvRaceTitle.setText(runRaceDetailInfo.getTitle());
137 134 }
138   - fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 140));
  135 +
  136 + //判断是否显示绑定轨迹按钮
  137 + if (runRaceDetailInfo.isTrackButton()) {
  138 + //显示
  139 + fragment.binding.rlScrollViewAddTrace.setVisibility(View.VISIBLE);
  140 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 140));
139 141 // //根据标题行数,自动调整卡片大小
140   - fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
141   - @Override
142   - public boolean onPreDraw() {
143   - int line = fragment.binding.includeStreet.tvRaceTitle.getLineCount();
144   - int height = fragment.binding.includeStreet.tvRaceTitle.getHeight();
145   - if (line > 1) {
146   - int avgHeight = height / line;//平局高度
147   - fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 140) + avgHeight * (line - 1));
  142 + fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
  143 + @Override
  144 + public boolean onPreDraw() {
  145 + int line = fragment.binding.includeStreet.tvRaceTitle.getLineCount();
  146 + int height = fragment.binding.includeStreet.tvRaceTitle.getHeight();
  147 + if (line > 1) {
  148 + int avgHeight = height / line;//平局高度
  149 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 140) + avgHeight * (line - 1));
148 150  
  151 + }
  152 + fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().removeOnPreDrawListener(this);
  153 + return false;
149 154 }
150   - fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().removeOnPreDrawListener(this);
151   - return false;
152   - }
153   - });
  155 + });
  156 + } else {
  157 + //不显示
  158 + fragment.binding.rlScrollViewAddTrace.setVisibility(View.GONE);
  159 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 100));
  160 +// //根据标题行数,自动调整卡片大小
  161 + fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
  162 + @Override
  163 + public boolean onPreDraw() {
  164 + int line = fragment.binding.includeStreet.tvRaceTitle.getLineCount();
  165 + int height = fragment.binding.includeStreet.tvRaceTitle.getHeight();
  166 + if (line > 1) {
  167 + int avgHeight = height / line;//平局高度
  168 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 100) + avgHeight * (line - 1));
  169 +
  170 + }
  171 + fragment.binding.includeStreet.tvRaceTitle.getViewTreeObserver().removeOnPreDrawListener(this);
  172 + return false;
  173 + }
  174 + });
  175 +
  176 + }
154 177 //设置活动地点
155 178 if (!TextUtils.isEmpty(runRaceDetailInfo.getAddress())) {
156 179 fragment.binding.includeStreet.tvAddress.setText(runRaceDetailInfo.getAddress());
... ... @@ -193,6 +216,7 @@ public class CollRunRaceDetailFragmentView implements MvpView, SensorEventListen
193 216 GlideApp.with(getContext()).load(runRaceDetailInfo.getRoadmap()).into(fragment.binding.includeStreetIntroduce.ivRoadMao);
194 217  
195 218 }
  219 +
196 220 //添加轨迹按钮点击事件
197 221 fragment.binding.rlScrollViewAddTrace.setOnClickListener(new View.OnClickListener() {
198 222 @Override
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningFinishFragmentView.java
1 1 package com.cnlive.moudle.collectionTrace.frame.view;
2 2  
3 3 import android.content.Context;
  4 +import android.graphics.Bitmap;
  5 +import android.graphics.BitmapFactory;
  6 +import android.os.Handler;
  7 +import android.support.v7.widget.LinearLayoutManager;
  8 +import android.text.TextUtils;
  9 +import android.util.Log;
  10 +import android.view.MotionEvent;
4 11 import android.view.View;
  12 +import android.widget.Toast;
5 13  
  14 +import com.baidu.location.LocationClient;
  15 +import com.baidu.location.LocationClientOption;
  16 +import com.baidu.mapapi.map.BaiduMap;
  17 +import com.baidu.mapapi.map.BitmapDescriptorFactory;
  18 +import com.baidu.mapapi.map.MapView;
  19 +import com.baidu.mapapi.map.MyLocationConfiguration;
  20 +import com.baidu.mapapi.map.Overlay;
  21 +import com.baidu.mapapi.map.UiSettings;
  22 +import com.baidu.mapapi.model.LatLng;
  23 +import com.baidu.trace.LBSTraceClient;
  24 +import com.baidu.trace.api.fence.AddMonitoredPersonResponse;
  25 +import com.baidu.trace.api.fence.CreateFenceRequest;
  26 +import com.baidu.trace.api.fence.CreateFenceResponse;
  27 +import com.baidu.trace.api.fence.DeleteFenceResponse;
  28 +import com.baidu.trace.api.fence.DeleteMonitoredPersonResponse;
  29 +import com.baidu.trace.api.fence.FenceListResponse;
  30 +import com.baidu.trace.api.fence.HistoryAlarmResponse;
  31 +import com.baidu.trace.api.fence.ListMonitoredPersonResponse;
  32 +import com.baidu.trace.api.fence.MonitoredStatusByLocationResponse;
  33 +import com.baidu.trace.api.fence.MonitoredStatusResponse;
  34 +import com.baidu.trace.api.fence.OnFenceListener;
  35 +import com.baidu.trace.api.fence.UpdateFenceResponse;
  36 +import com.baidu.trace.model.CoordType;
  37 +import com.baidu.trace.model.SortType;
  38 +import com.cnlive.libs.base.logic.Event;
  39 +import com.cnlive.libs.base.logic.callback.FailureCallback;
  40 +import com.cnlive.libs.base.logic.callback.SuccessCallback;
  41 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
  42 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  43 +import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter;
6 44 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningFinishFragment;
  45 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  46 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  47 +import com.cnlive.moudle.pedometer.model.Constant;
7 48 import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  49 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
8 50 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment;
  51 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  52 +import com.cnlive.moudle.pedometer.upload.UploadLogic;
  53 +import com.cnlive.moudle.pedometer.utils.BitmapUtil;
  54 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  55 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  56 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  57 +import com.cnlive.moudle.pedometer.utils.ScreenUtil;
  58 +import com.cnlive.moudle.pedometer.utils.TimeUtil;
  59 +import com.cnlive.strike.application.GlideApp;
  60 +import com.example.moudle_pedometer.R;
9 61 import com.hannesdorfmann.mosby3.mvp.MvpView;
  62 +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
  63 +import com.sothree.slidinguppanel.SlidingUpPanelLayout;
10 64  
11   -public class CollRunningFinishFragmentView implements MvpView {
  65 +import java.io.File;
  66 +import java.io.FileOutputStream;
  67 +import java.text.SimpleDateFormat;
  68 +import java.util.ArrayList;
  69 +import java.util.Date;
  70 +import java.util.List;
  71 +
  72 +public class CollRunningFinishFragmentView implements MvpView, OnFenceListener {
12 73 private CollRunningFinishFragment fragment;
  74 + private CollFinishDetaiAdapter adapter;
  75 + public BaiduMap baiduMap;
  76 + private MapView mMapView;
  77 + private UiSettings mUiSettings;
  78 + private LBSTraceClient mClient = null;
  79 + private List<Overlay> allMapOverlays;
  80 + private List<LatLng> queryResultPoints;
  81 + private List<com.baidu.trace.model.LatLng> collectLatLngs;
  82 + private CollUserStepEntity collUserStepEntity;
13 83  
14 84 public CollRunningFinishFragmentView(CollRunningFinishFragment fragment) {
15 85 this.fragment = fragment;
... ... @@ -19,23 +89,89 @@ public class CollRunningFinishFragmentView implements MvpView {
19 89 return fragment == null ? null : fragment.getActivity();
20 90 }
21 91  
22   - public void initView(RunningFinishBean runningFinishBean) {
  92 + public void initView(CollUserStepEntity collUserStepEntity) {
  93 + this.collUserStepEntity = collUserStepEntity;
  94 + allMapOverlays = new ArrayList<>();
  95 + //设置滑动卡片
  96 +// fragment.binding.slidingLayout.set
  97 + //添加起点
  98 + CollectPoint startPoint = null;
  99 + if (!TextUtils.isEmpty(collUserStepEntity.getCollStartPointData())) {
  100 + startPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollStartPointData(), CollectPoint.class);
  101 + }
  102 + CollectPoint endPoint = null;
  103 + if (!TextUtils.isEmpty(collUserStepEntity.getCollEndPointData())) {
  104 + endPoint = GsonUtil.GsonToBean(collUserStepEntity.getCollEndPointData(), CollectPoint.class);
  105 + }
  106 + //查询用户历史轨迹
  107 + if (0 != collUserStepEntity.getStartTimeStamp() && 0 != collUserStepEntity.getFinishTimeStamp()) {
  108 + long startTime = collUserStepEntity.getStartTimeStamp();
  109 + long endTime = collUserStepEntity.getFinishTimeStamp();
  110 + //开始查询
  111 + queryWalkTrace(startTime, endTime);
  112 + if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
  113 + List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
  114 + //绘制运营打的点
  115 + if (null != collectPoints) {
  116 + //根据打点集合,自适应缩放
  117 + MyMapUtil.setCollMapAutoZoom(baiduMap, collectPoints, -1.5f);
  118 + for (CollectPoint point : collectPoints) {
  119 + LatLng markLatLng = new LatLng(point.getLatitude(), point.getLongitude());
  120 + if (null != markLatLng) {
  121 + //将点位显示到地图上
  122 + Overlay overlay = MyMapUtil.setMapMarker(getContext(), baiduMap, markLatLng, R.drawable.icon_map_import);
  123 + if (null != overlay) {
  124 + allMapOverlays.add(overlay);
  125 + }
  126 + }
  127 + }
  128 + }
  129 + }
  130 + }
  131 + //设置用户昵称
  132 + String nickName = CommonInfo.getUserNickName(getContext());
  133 + fragment.binding.includeFinishUserInfo.tvUserNickName.setText(nickName);
  134 + //设置用户头像
  135 + String faceUrl = CommonInfo.getUserIcon(getContext());
  136 + if (!TextUtils.isEmpty(faceUrl)) {
  137 + GlideApp.with(getContext()).load(faceUrl).into(fragment.binding.includeFinishUserInfo.qmIvIcon);
  138 + }
  139 + //设置标题
  140 + if (!TextUtils.isEmpty(collUserStepEntity.getStreetTitle())) {
  141 + fragment.binding.includeFinishUserInfo.tvStreetName.setText(collUserStepEntity.getStreetTitle());
  142 + }
23 143 //设置距离
24   - fragment.binding.includeFinishUserInfo.tvDistance.setText(runningFinishBean.getRunDistance());
25   - //设置配速
26   - fragment.binding.includeFinishUserInfo.tvSpeed.setText(runningFinishBean.getSpeed());
27   - //设置用时
28   - fragment.binding.includeFinishUserInfo.tvTimer.setText(runningFinishBean.getTime());
29   - //设置日期
30   - fragment.binding.includeFinishUserInfo.tvDate.setText(runningFinishBean.getDate());
31   - //设置步数
32   - fragment.binding.includeFinishStep.tvStep.setText(runningFinishBean.getStep());
33   - //设置起点位置
34   - fragment.binding.includeFinishRunRoute.tvStartPoint.setText(runningFinishBean.getStartPoint());
35   - //设置终点位置
36   - fragment.binding.includeFinishRunRoute.tvEndPoint.setText(runningFinishBean.getEndPoint());
37   - //设置时间
38   - fragment.binding.includeFinishRunRoute.tvTimer.setText(runningFinishBean.getTime());
  144 + if (!TextUtils.isEmpty(collUserStepEntity.getStepCount())) {
  145 + fragment.binding.includeFinishUserInfo.tvDistance.setText(CollStepUtil.getWalkDistanceKM(Long.parseLong(collUserStepEntity.getStepCount())) + "");
  146 + } else {
  147 + fragment.binding.includeFinishUserInfo.tvDistance.setText("0");
  148 + }
  149 + if (0 != collUserStepEntity.getFinishTimeStamp()) {
  150 + //设置日期
  151 + fragment.binding.includeFinishUserInfo.tvDate.setText(TimeUtil.getStampToTime(collUserStepEntity.getFinishTimeStamp() * 1000, "yyyy-MM-dd HH:mm"));
  152 + }
  153 + //设置适配器
  154 + if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
  155 + List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
  156 + if (null == collectPoints) {
  157 + collectPoints = new ArrayList<>();
  158 + }
  159 + if (null != startPoint) {
  160 + collectPoints.add(0, startPoint);
  161 + }
  162 + if (null != endPoint) {
  163 + collectPoints.add(endPoint);
  164 + }
  165 + //格式化打的点
  166 + collectLatLngs = new ArrayList<>();
  167 + for (CollectPoint collectPoint : collectPoints) {
  168 + collectLatLngs.add(new com.baidu.trace.model.LatLng(collectPoint.getLatitude(), collectPoint.getLongitude()));
  169 + }
  170 + adapter = new CollFinishDetaiAdapter(fragment.getActivity(), collectPoints);
  171 + //设置
  172 + fragment.binding.includeFinishUserInfo.rvList.setLayoutManager(new LinearLayoutManager(fragment.getActivity()));
  173 + fragment.binding.includeFinishUserInfo.rvList.setAdapter(adapter);
  174 + }
39 175 //返回按钮点击
40 176 fragment.binding.flBack.setOnClickListener(new View.OnClickListener() {
41 177 @Override
... ... @@ -46,5 +182,432 @@ public class CollRunningFinishFragmentView implements MvpView {
46 182 fragment.getActivity().finish();
47 183 }
48 184 });
  185 + fragment.binding.rlScrollViewStartBtn.setOnTouchListener(new View.OnTouchListener() {
  186 + @Override
  187 + public boolean onTouch(View view, MotionEvent motionEvent) {
  188 + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
  189 + //判断是否成功查询到轨迹点
  190 + if (null == queryResultPoints) {
  191 + QMUITipDialogUtil.textDialog(getContext(), "正在获取轨迹信息,请稍后...", 1);
  192 + } else {
  193 + //隐藏面板视图
  194 +// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
  195 + fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(), 100));
  196 + fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
  197 + //让运营选择最佳的截图
  198 + SelectDialog selectDialog = new SelectDialog(getContext(), "当前赛事图是否\n已经调整到最佳效果?", "否", new SelectDialog.DialogInterface() {
  199 + @Override
  200 + public void onClick(SelectDialog dialog) {
  201 + dialog.dismiss();
  202 + }
  203 + }, "是", new SelectDialog.DialogInterface() {
  204 + @Override
  205 + public void onClick(SelectDialog dialog) {
  206 + if (null != allMapOverlays) {
  207 + for (Overlay overlay : allMapOverlays) {
  208 + overlay.remove();
  209 + }
  210 + }
  211 + dialog.dismiss();
  212 + QMUITipDialogUtil.loadingDialog(getContext(), "正在截取赛事图片,请稍后", false);
  213 + //延迟一秒进行截图,以免把打的点都截取到
  214 + new Handler().postDelayed(new Runnable() {
  215 + @Override
  216 + public void run() {
  217 + if (null != collectLatLngs && collectLatLngs.size() > 1) {
  218 +// getBaiDuSnap();
  219 + addFence();
  220 + }
  221 + }
  222 + }, 1000);
  223 + }
  224 + });
  225 + selectDialog.setCanceledOnTouchOutside(false);
  226 + selectDialog.setCancelable(false);
  227 + selectDialog.show();
  228 + }
  229 + }
  230 + return false;
  231 + }
  232 + });
  233 +// //确定轨迹按钮点击事件
  234 +// fragment.binding.rlScrollViewStartBtn.setOnClickListener(new View.OnClickListener() {
  235 +// @Override
  236 +// public void onClick(View view) {
  237 +// Log.e("aaa", "onClick: ");
  238 +// //开始整合数据
  239 +// //判断是否成功查询到轨迹点
  240 +// if (null == queryResultPoints) {
  241 +// QMUITipDialogUtil.textDialog(getContext(), "正在获取轨迹信息,请稍后...", 1);
  242 +// } else {
  243 +// //隐藏面板视图
  244 +//// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
  245 +// fragment.binding.slidingLayout.setPanelHeight(ScreenUtil.dip2px(getContext(),100));
  246 +// fragment.binding.slidingLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
  247 +// //让运营选择最佳的截图
  248 +// SelectDialog selectDialog = new SelectDialog(getContext(), "当前赛事图是否\n已经调整到最佳效果?", "否", new SelectDialog.DialogInterface() {
  249 +// @Override
  250 +// public void onClick(SelectDialog dialog) {
  251 +// dialog.dismiss();
  252 +// }
  253 +// }, "是", new SelectDialog.DialogInterface() {
  254 +// @Override
  255 +// public void onClick(SelectDialog dialog) {
  256 +// if (null != allMapOverlays) {
  257 +// for (Overlay overlay : allMapOverlays) {
  258 +// overlay.remove();
  259 +// }
  260 +// }
  261 +// dialog.dismiss();
  262 +// QMUITipDialogUtil.textDialog(getContext(), "正在截取赛事图片,请稍后", 1);
  263 +// //延迟一秒进行截图,以免把打的点都截取到
  264 +// new Handler().postDelayed(new Runnable() {
  265 +// @Override
  266 +// public void run() {
  267 +// baiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
  268 +// @Override
  269 +// public void onSnapshotReady(Bitmap bitmap) {
  270 +// if (null == bitmap) {
  271 +// QMUITipDialogUtil.dismessDialog();
  272 +// QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  273 +// return;
  274 +// }
  275 +//
  276 +// //开始保存截屏
  277 +// try {
  278 +// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  279 +// File image = new File(getContext().getExternalCacheDir() + "/location_screenshot_" + sdf.format(new Date()) + ".jpeg");
  280 +// FileOutputStream fos = new FileOutputStream(当前赛事图是否
  281 +//已经调整到最佳效果?image);
  282 +// boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
  283 +// fos.flush();
  284 +// fos.close();
  285 +// //获取保存截图地址
  286 +//// image.getAbsolutePath()
  287 +// } catch (Exception e) {
  288 +// QMUITipDialogUtil.dismessDialog();
  289 +// QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  290 +// e.printStackTrace();
  291 +// }
  292 +// }
  293 +// });
  294 +// }
  295 +// }, 1000);
  296 +// }
  297 +// });
  298 +// selectDialog.setCanceledOnTouchOutside(false);
  299 +// selectDialog.setCancelable(false);
  300 +// selectDialog.show();
  301 +// }
  302 +// }
  303 +// });
  304 +
  305 + }
  306 +
  307 + private void queryWalkTrace(long startTime, long endTime) {
  308 + MyMapUtil.queryHistoryTrace(getContext(), mClient, CommonInfo.getUserId(getContext()), startTime, endTime, new MyMapUtil.CallBack() {
  309 + @Override
  310 + public void success(List<LatLng> resultPoints) {
  311 + queryResultPoints = resultPoints;
  312 + if (null != resultPoints) {
  313 + //绘制轨迹
  314 + MyMapUtil.drawHistoryTrack(getContext(), baiduMap, resultPoints, SortType.asc, R.color.green_round, R.drawable.icon_start, R.drawable.icon_end);
  315 + } else {
  316 + SelectDialog selectDialog = new SelectDialog(getContext(), "轨迹获取失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  317 + @Override
  318 + public void onClick(SelectDialog dialog) {
  319 + dialog.dismiss();
  320 + }
  321 + }, "重试", new SelectDialog.DialogInterface() {
  322 + @Override
  323 + public void onClick(SelectDialog dialog) {
  324 + dialog.dismiss();
  325 + queryWalkTrace(startTime, endTime);
  326 + }
  327 + });
  328 + selectDialog.setCancelable(false);
  329 + selectDialog.setCanceledOnTouchOutside(false);
  330 + if (!selectDialog.isShowing()) {
  331 + selectDialog.show();
  332 + }
  333 + }
  334 + }
  335 + });
  336 + }
  337 +
  338 + private void getBaiDuSnap() {
  339 + baiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
  340 + @Override
  341 + public void onSnapshotReady(Bitmap bitmap) {
  342 + QMUITipDialogUtil.dismessDialog();
  343 + if (null == bitmap) {
  344 + QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  345 + return;
  346 + }
  347 + //开始保存截屏
  348 + try {
  349 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  350 + File image = new File(getContext().getExternalCacheDir() + "/location_screenshot_" + sdf.format(new Date()) + ".jpeg");
  351 + FileOutputStream fos = new FileOutputStream(image);
  352 + boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
  353 + fos.flush();
  354 + fos.close();
  355 + //获取保存截图地址
  356 + String roadMapPath = image.getAbsolutePath();
  357 + //开始上传
  358 + uploadRoadMapPic(roadMapPath);
  359 + } catch (Exception e) {
  360 + QMUITipDialogUtil.dismessDialog();
  361 + QMUITipDialogUtil.failedDialog(getContext(), "赛事图片截取失败,请重试", 2);
  362 + e.printStackTrace();
  363 + }
  364 + }
  365 + });
  366 + }
  367 +
  368 + /**
  369 + * 上传赛事图片
  370 + *
  371 + * @param roadMapPath
  372 + */
  373 + private void uploadRoadMapPic(String roadMapPath) {
  374 + if (!TextUtils.isEmpty(roadMapPath)) {
  375 + QMUITipDialogUtil.loadingDialog(getContext(), "正在上传赛事图片,请稍后", false);
  376 + List<String> imagePaths = new ArrayList<>();
  377 + imagePaths.add(roadMapPath);
  378 + UploadLogic.uploadAddressPicInfo(getContext(), imagePaths, new Event<String>()
  379 + .setFailureCallback(new FailureCallback() {
  380 + @Override
  381 + public void onFailure(int i, String s) {
  382 + QMUITipDialogUtil.dismessDialog();
  383 + SelectDialog selectDialog = new SelectDialog(getContext(), "赛事图片上传失败,是否重试?", "取消", new SelectDialog.DialogInterface() {
  384 + @Override
  385 + public void onClick(SelectDialog dialog) {
  386 + dialog.dismiss();
  387 + }
  388 + }, "重试", new SelectDialog.DialogInterface() {
  389 + @Override
  390 + public void onClick(SelectDialog dialog) {
  391 + dialog.dismiss();
  392 + uploadRoadMapPic(roadMapPath);
  393 + }
  394 + });
  395 + selectDialog.setCancelable(false);
  396 + selectDialog.setCanceledOnTouchOutside(false);
  397 + if (!selectDialog.isShowing()) {
  398 + selectDialog.show();
  399 + }
  400 +
  401 + }
  402 + })
  403 + .setSuccessCallback(new SuccessCallback<String>() {
  404 + @Override
  405 + public void onSuccess(String data) {
  406 + QMUITipDialogUtil.dismessDialog();
  407 + //开始把数据传到服务端
  408 + collUserStepEntity = CollStepUtil.getCollUserStepData(getContext(), CollCommonInfo.getUserId(getContext()));
  409 + if (null != fragment.getPresenter() || null == fragment.getActivity() || null == collUserStepEntity || TextUtils.isEmpty(data)) {
  410 + fragment.getPresenter().uploadTraceDateToServer(fragment.getActivity(), collUserStepEntity, data);
  411 + }
  412 + }
  413 + })
  414 + );
  415 + //
  416 + }
  417 + }
  418 +
  419 + private void addFence() {
  420 + QMUITipDialogUtil.dismessDialog();
  421 + QMUITipDialogUtil.loadingDialog(getContext(), "正在创建地理围栏", false);
  422 + CreateFenceRequest createFenceRequest = null;
  423 + int offset = Constant.FENCE_OFFSET;// 偏离距离
  424 + int denoise = Constant.FENCE_DENOISE; //围栏去噪精度
  425 + if (null != collUserStepEntity) {
  426 + //赛事标题作为围栏名称
  427 + String eventId = collUserStepEntity.getStreetId();
  428 + if (mClient != null && !TextUtils.isEmpty(eventId) && null != collectLatLngs) {
  429 + createFenceRequest = CreateFenceRequest.buildServerPolylineRequest(Constant.TAG, Constant.SERVICE_ID, eventId, "cc", collectLatLngs, offset, denoise, CoordType.gcj02);
  430 + mClient.createFence(createFenceRequest, CollRunningFinishFragmentView.this);
  431 + }
  432 + }
  433 + }
  434 +
  435 + // //判断地理围栏是否创建成功
  436 +// if (null != collUserStepEntity) {
  437 +// if (TextUtils.isEmpty(collUserStepEntity.getFenceId())) {
  438 +// //开始创建地理围栏
  439 +// QMUITipDialogUtil.loadingDialog(getContext(), "正在创建地理围栏", false);
  440 +// CreateFenceRequest createFenceRequest = null;
  441 +// int offset = Constant.FENCE_OFFSET;// 偏离距离
  442 +// int denoise = Constant.FENCE_DENOISE; //围栏去噪精度
  443 +// if (null != collUserStepEntity) {
  444 +// //赛事标题作为围栏名称
  445 +// String fenceName = collUserStepEntity.getStreetTitle();
  446 +// if (mClient != null && !TextUtils.isEmpty(fenceName) && null != collectLatLngs) {
  447 +// if (createFenceRequest == null) {
  448 +// createFenceRequest = CreateFenceRequest.buildServerPolylineRequest(Constant.TAG, Constant.SERVICE_ID, fenceName, "", collectLatLngs, offset, denoise, CoordType.gcj02);
  449 +// mClient.createFence(createFenceRequest, CollRunningFinishFragmentView.this);
  450 +// }
  451 +// }
  452 +// }
  453 +// } else {
  454 +// //已经存在地理围栏(直接将数据传给服务器)
  455 +//
  456 +// }
  457 +// }
  458 + public void initMap() {
  459 + this.mMapView = fragment.binding.mapView;
  460 + if (baiduMap == null) {
  461 + baiduMap = mMapView.getMap();
  462 + }
  463 + if (mUiSettings == null) {
  464 + mUiSettings = baiduMap.getUiSettings();
  465 + }
  466 + if (mClient == null) {
  467 + mClient = new LBSTraceClient(getContext());
  468 + }
  469 + //启动所有手势
  470 + mUiSettings.setAllGesturesEnabled(true);
  471 + //通过设置enable为true或false 选择是否显示缩放按钮
  472 + mMapView.showZoomControls(false);
  473 + mUiSettings.setEnlargeCenterWithDoubleClickEnable(true);
  474 + //隐藏自带的指南针,改用自定义指南针 杨帅
  475 + mUiSettings.setCompassEnabled(false);
  476 + //显示定位图层
  477 + baiduMap.setMyLocationEnabled(false);
  478 + LocationClientOption option = new LocationClientOption();
  479 + option.setOpenGps(true); // 打开gps
  480 + //可选,设置返回经纬度坐标类型,默认GCJ02
  481 + //GCJ02:国测局坐标;
  482 + //BD09ll:百度经纬度坐标;
  483 + //BD09:百度墨卡托坐标;
  484 + //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
  485 + option.setCoorType("gcj02"); // 设置坐标类型
  486 + //可选,默认false,设置是否开启Gps定位
  487 + option.setOpenGps(true);
  488 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
  489 + option.setOpenAutoNotifyMode();
  490 + //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  491 + //LocationMode.Hight_Accuracy:高精度;
  492 + //LocationMode. Battery_Saving:低功耗;
  493 + //LocationMode. Device_Sensors:仅使用设备;
  494 + option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
  495 + //可选,设置是否需要地址信息,默认不需要
  496 + option.setIsNeedAddress(false);
  497 + //可选,设置是否需要地址描述
  498 + option.setIsNeedLocationDescribe(false);
  499 + //可选,设置是否需要设备方向结果
  500 + option.setNeedDeviceDirect(false);
  501 + //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
  502 + //minTimeInterval - 最短定位时间间隔,单位毫秒,最小值0,开发者可以在设置希望的位置回调最短时间间隔
  503 + //minDistance - 最短定位距离间隔,单位米,最小值0,开发者可以设置希望的位置回调距离间隔
  504 + //locSensitivity - 定位变化敏感程度,LOC_SENSITIVITY_HIGHT,LOC_SENSITIVITY_MIDDLE,LOC_SENSITIVITY_LOW
  505 + option.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
  506 + //可选,定位SDK内部是一个service,并放到了独立进程。
  507 + //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
  508 + option.setIgnoreKillProcess(true);
  509 +
  510 + }
  511 +
  512 + public void onResume() {
  513 + if (null != mMapView) {
  514 + mMapView.onResume();
  515 + }
  516 + }
  517 +
  518 + public void onPause() {
  519 + if (null != mMapView) {
  520 + mMapView.onPause();
  521 + }
  522 + }
  523 +
  524 + public void onDestroy() {
  525 + if (null != allMapOverlays) {
  526 + for (Overlay overlay : allMapOverlays) {
  527 + overlay.remove();
  528 + }
  529 + allMapOverlays = null;
  530 + baiduMap.clear();
  531 + }
  532 +
  533 + if (mMapView != null) {
  534 + mMapView.onDestroy();
  535 + mMapView = null;
  536 + }
  537 + }
  538 +
  539 + /**
  540 + * 常见围栏成功回调
  541 + *
  542 + * @param createFenceResponse
  543 + */
  544 + @Override
  545 + public void onCreateFenceCallback(CreateFenceResponse createFenceResponse) {
  546 + if (null == getContext() || null == createFenceResponse) {
  547 + return;
  548 + }
  549 + Log.e("地理围栏", "状态: " + createFenceResponse.getStatus() + ",返回信息:" + createFenceResponse.getMessage());
  550 + //关闭提示框
  551 + QMUITipDialogUtil.dismessDialog();
  552 + //判断是否成功
  553 + if (0 == createFenceResponse.getStatus()) {
  554 + //获取围栏id
  555 + long fenceId = createFenceResponse.getFenceId();
  556 + Log.e("地理围栏", "创建围栏成功ID: " + fenceId + ",围栏名称" + createFenceResponse.getFenceName());
  557 + //保存到数据库中
  558 + CollStepUtil.setFenceId(getContext(), CollCommonInfo.getUserId(getContext()), fenceId + "");
  559 + //提交到后台
  560 +
  561 + } else {
  562 + //创建围栏失败
  563 + //创建提示信息
  564 + QMUITipDialogUtil.failedDialog(getContext(), createFenceResponse.getMessage(), 2);
  565 + }
  566 +
  567 + }
  568 +
  569 + @Override
  570 + public void onUpdateFenceCallback(UpdateFenceResponse updateFenceResponse) {
  571 +
  572 + }
  573 +
  574 + @Override
  575 + public void onDeleteFenceCallback(DeleteFenceResponse deleteFenceResponse) {
  576 +
  577 + }
  578 +
  579 + @Override
  580 + public void onFenceListCallback(FenceListResponse fenceListResponse) {
  581 +
  582 + }
  583 +
  584 + @Override
  585 + public void onMonitoredStatusCallback(MonitoredStatusResponse monitoredStatusResponse) {
  586 +
  587 + }
  588 +
  589 + @Override
  590 + public void onMonitoredStatusByLocationCallback(MonitoredStatusByLocationResponse monitoredStatusByLocationResponse) {
  591 +
  592 + }
  593 +
  594 + @Override
  595 + public void onHistoryAlarmCallback(HistoryAlarmResponse historyAlarmResponse) {
  596 +
  597 + }
  598 +
  599 + @Override
  600 + public void onAddMonitoredPersonCallback(AddMonitoredPersonResponse addMonitoredPersonResponse) {
  601 +
  602 + }
  603 +
  604 + @Override
  605 + public void onDeleteMonitoredPersonCallback(DeleteMonitoredPersonResponse deleteMonitoredPersonResponse) {
  606 +
  607 + }
  608 +
  609 + @Override
  610 + public void onListMonitoredPersonCallback(ListMonitoredPersonResponse listMonitoredPersonResponse) {
  611 +
49 612 }
50 613 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollRunningMapFragmentView.java
... ... @@ -32,11 +32,16 @@ import com.baidu.mapapi.map.Overlay;
32 32 import com.baidu.mapapi.map.UiSettings;
33 33 import com.baidu.mapapi.model.LatLng;
34 34 import com.baidu.mapapi.utils.DistanceUtil;
  35 +import com.baidu.trace.model.SortType;
  36 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  37 +import com.cnlive.moudle.collectionTrace.service.CollStepService;
  38 +import com.cnlive.moudle.collectionTrace.ui.activity.CollRunningFinishActivity;
35 39 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunningMapFragment;
36 40 import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
37 41 import com.cnlive.moudle.pedometer.model.Constant;
38 42 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
39 43 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
  44 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
40 45 import com.cnlive.moudle.pedometer.utils.BitmapUtil;
41 46 import com.cnlive.moudle.pedometer.utils.ButtonAnimUtil;
42 47 import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
... ... @@ -60,26 +65,31 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
60 65 private BitmapDescriptor mCurrentMarker;//定位图标
61 66 private static int accuracyCircleFillColor;
62 67 private static int accuracyCircleStrokeColor;
63   - private static MyLocationData mylocation;
  68 + private MyLocationData followMyLocation;
64 69 boolean isFirstLoc = true; // 是否首次定位
65 70 private MarkerOptions currentMark;
66   - private LatLng myCurLatLng;
67 71 private Double lastX = 0.0;
68 72 private int mCurrentDirection = 0;
69   - private double mCurrentLat = 0.0;
70   - private double mCurrentLon = 0.0;
71 73 private float mCurrentAccracy;
72 74 // 定位相关
73 75 private LocationClient mLocClient;
74 76 public MyLocationListenner myListener = new MyLocationListenner();
75   - private final int DEFULT_ZOOM = 17;
  77 + private int DEFULT_ZOOM = 17;
76 78 private boolean isFirstLoadMap = true;
77 79 private Overlay currentLine;
78   - private List<LatLng> currentPoints;
  80 + private List<LatLng> currentWalkPoints;//用户当前行走的线的集合
79 81 private CollUserStepEntity userStepEntity;
80 82 private String uid;
81 83 private RunRaceDetailInfo runRaceDetailInfo;
82   - private List<Overlay> overlays;
  84 + private List<Overlay> allMapOverlays;
  85 + private SelectDialog selectDialog;
  86 + private SelectDialog endSelectDialog;
  87 + private boolean isShowFollowAddress = false;//是否显示跟随地址
  88 + private boolean isShowEndFollowAddress = false;//是否显示结束跟随地址
  89 +
  90 + private String currentAddress;
  91 + private LatLng currentImportLatLng;
  92 + private String employTime = "";//用时
83 93  
84 94 public CollRunningMapFragmentView(CollRunningMapFragment fragment) {
85 95 this.fragment = fragment;
... ... @@ -90,7 +100,10 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
90 100 }
91 101  
92 102 public void initView(RunRaceDetailInfo runRaceDetailInfo) {
93   - currentPoints = new ArrayList<>();
  103 + //初始化打点提示框
  104 + initSelectDialog();
  105 + //初始化结束打点提示框
  106 + initFinishSelectDialog();
94 107 this.runRaceDetailInfo = runRaceDetailInfo;
95 108 uid = CollCommonInfo.getUserId(getContext());
96 109 userStepEntity = CollStepUtil.getCollUserStepData(getContext(), uid);
... ... @@ -111,26 +124,88 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
111 124 fragment.binding.tvCurrentDiatance.setText(CollStepUtil.getWalkDistanceKM(Long.parseLong(userStepEntity.getStepCount())) + "");
112 125 }
113 126 //设置是否需要设置起点信息
114   - if (TextUtils.isEmpty(userStepEntity.getCollStartLatLng())||TextUtils.isEmpty(userStepEntity.getCollStartLatLngName())) {
  127 + if (TextUtils.isEmpty(userStepEntity.getCollStartPointData())) {
115 128 //开始设置
116 129 if (!TextUtils.isEmpty(runRaceDetailInfo.getCollStartLatLng()) && !TextUtils.isEmpty(runRaceDetailInfo.getCollStartLntLngName())) {
117   - CollStepUtil.setCollStartPointData(getContext(), uid, runRaceDetailInfo.getCollStartLntLngName(), runRaceDetailInfo.getCollStartLatLng());
  130 + CollectPoint collectPoint = new CollectPoint();
  131 + LatLng latLng = GsonUtil.GsonToBean(runRaceDetailInfo.getCollStartLatLng(), LatLng.class);
  132 + if (null != latLng) {
  133 + collectPoint.setLatitude(latLng.latitude);
  134 + collectPoint.setLongitude(latLng.longitude);
  135 + collectPoint.setPointName(runRaceDetailInfo.getCollStartLntLngName());
  136 + CollStepUtil.setCollStartPointData(getContext(), uid, collectPoint);
  137 +
  138 + }
118 139 }
119 140 }
120 141 initChrom();
121 142 //初始化起点
122   - overlays = new ArrayList<>();
  143 + allMapOverlays = new ArrayList<>();
123 144 //打起点(重新获取数据)
124 145 userStepEntity = CollStepUtil.getCollUserStepData(getContext(), uid);
125   - if (!TextUtils.isEmpty(userStepEntity.getCollStartLatLng())) {
126   - LatLng startLatLng = GsonUtil.GsonToBean(userStepEntity.getCollStartLatLng(), LatLng.class);
127   - if (null != startLatLng) {
128   - List<Overlay> resultOverlays = MyMapUtil.setStartMarker(getContext(), baiduMap, startLatLng, R.drawable.icon_start);
129   - if (null != resultOverlays) {
130   - this.overlays.addAll(resultOverlays);
  146 + //查询历史轨迹(用于用户返回后再次进入,无法显示轨迹问题)
  147 + if (0 != userStepEntity.getStartTimeStamp()) {
  148 + //获取当前时间戳
  149 + long currentTimeStamp = TimeUtil.getNowTimeStamp();
  150 + //获取用户开始时间
  151 + long userStartTime = userStepEntity.getStartTimeStamp();
  152 + double result = currentTimeStamp - userStartTime;
  153 + //超过一分钟才进行查询
  154 + if (result > 1 * 60) {
  155 + if (null != CollStepService.mClient) {
  156 + MyMapUtil.queryHistoryTrace(getContext(), CollStepService.mClient, CollStepService.entityName, userStartTime, currentTimeStamp, new MyMapUtil.CallBack() {
  157 + @Override
  158 + public void success(List<LatLng> resultPoints) {
  159 + if (null != resultPoints && resultPoints.size() > 1) {
  160 + //绘制历史轨迹
  161 + MyMapUtil.drawHistoryTrack(getContext(), baiduMap, resultPoints, SortType.asc, R.color.green_round, R.drawable.icon_start, 0);
  162 + //将最后一个点添加到用户走的线中
  163 + currentWalkPoints = new ArrayList<>();
  164 + currentWalkPoints.add(resultPoints.get(resultPoints.size() - 1));
  165 + }
  166 + }
  167 + });
  168 + }
  169 + } else {
  170 + //绘制起点
  171 + if (!TextUtils.isEmpty(userStepEntity.getCollStartPointData())) {
  172 + CollectPoint collectPoint = GsonUtil.GsonToBean(userStepEntity.getCollStartPointData(), CollectPoint.class);
  173 + if (null != collectPoint) {
  174 + LatLng startLatLng = new LatLng(collectPoint.getLatitude(), collectPoint.getLongitude());
  175 + //把起点添加到用户走的实时轨迹中
  176 + currentWalkPoints = new ArrayList<>();
  177 + currentWalkPoints.add(startLatLng);
  178 + List<Overlay> resultOverlays = MyMapUtil.setStartMarker(getContext(), baiduMap, startLatLng, R.drawable.icon_start);
  179 + if (null != resultOverlays) {
  180 + this.allMapOverlays.addAll(resultOverlays);
  181 + }
  182 + }
  183 + }
  184 + //
  185 + }
  186 + //
  187 + }
  188 +
  189 +
  190 + //更新可打点数量
  191 + int remainPointNum = updataCanTakePointCount();
  192 + if (remainPointNum != 0) {
  193 + //展示点位信息
  194 + List<CollectPoint> collectPoints = CollStepUtil.getCollImportPointList(getContext(), CollCommonInfo.getUserId(getContext()));
  195 + if (null != collectPoints) {
  196 + for (CollectPoint point : collectPoints) {
  197 + LatLng markLatLng = new LatLng(point.getLatitude(), point.getLongitude());
  198 + if (null != markLatLng) {
  199 + //将点位显示到地图上
  200 + Overlay overlay = MyMapUtil.setMapMarker(getContext(), baiduMap, markLatLng, R.drawable.icon_map_import);
  201 + if (null != overlay) {
  202 + allMapOverlays.add(overlay);
  203 + }
  204 + }
131 205 }
132 206 }
133 207 }
  208 + //
134 209 }
135 210 //返回键
136 211 fragment.binding.flBack.setOnTouchListener(new View.OnTouchListener() {
... ... @@ -172,9 +247,144 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
172 247 isFirstLoc = true;
173 248 }
174 249 });
  250 + //开始打点
  251 + fragment.binding.flTakeImportPoint.setOnClickListener(new View.OnClickListener() {
  252 + @Override
  253 + public void onClick(View view) {
  254 + //更新可打点数量
  255 + int remainNum = updataCanTakePointCount();
  256 + if (remainNum != 0) {
  257 + if (null != followMyLocation) {
  258 + currentImportLatLng = new LatLng(followMyLocation.latitude, followMyLocation.longitude);
  259 + }
  260 + //获取当前地点
  261 + if (!TextUtils.isEmpty(currentAddress)) {
  262 + selectDialog.setTipMessage("确定在" + "\"" + currentAddress + "\"" + "打点?");
  263 + selectDialog.show();
  264 + } else {
  265 + isShowFollowAddress = true;
  266 + Toast.makeText(getContext(), "正在获取当前地点信息,请稍后", Toast.LENGTH_SHORT).show();
  267 + }
  268 + } else {
  269 + Toast.makeText(getContext(), "打点数量超过最大限制,无法打点!", Toast.LENGTH_SHORT).show();
  270 + }
  271 + }
  272 + });
  273 +
  274 + //结束按钮点击事件
  275 + fragment.binding.flEndPoint.setOnClickListener(new View.OnClickListener() {
  276 + @Override
  277 + public void onClick(View view) {
  278 + if (null != followMyLocation) {
  279 + currentImportLatLng = new LatLng(followMyLocation.latitude, followMyLocation.longitude);
  280 + //获取当前地点
  281 + if (!TextUtils.isEmpty(currentAddress)) {
  282 + endSelectDialog.setTipMessage("确定将" + "\"" + currentAddress + "\"" + "设为结束地点?");
  283 + endSelectDialog.show();
  284 + } else {
  285 + isShowEndFollowAddress = true;
  286 + Toast.makeText(getContext(), "正在获取当前地点信息,请稍后", Toast.LENGTH_SHORT).show();
  287 + }
  288 + }
  289 + }
  290 + });
175 291  
176 292 }
177 293  
  294 + /**
  295 + * 更新可打点位数量
  296 + *
  297 + * @return
  298 + */
  299 + private int updataCanTakePointCount() {
  300 + //获取用户可打点的数量
  301 + int canTakePointCount = CollStepUtil.getCollImportPointSize(getContext(), CollCommonInfo.getUserId(getContext()));
  302 + if (canTakePointCount < 98) {
  303 + canTakePointCount = 98 - canTakePointCount;
  304 + } else {
  305 + canTakePointCount = 0;
  306 + }
  307 + fragment.binding.tvCanTakePointSize.setText("可打点数量:" + canTakePointCount + "个");
  308 + return canTakePointCount;
  309 + }
  310 +
  311 + private void initSelectDialog() {
  312 + if (selectDialog == null) {
  313 + selectDialog = new SelectDialog(getContext(), "标题", "否", new SelectDialog.DialogInterface() {
  314 + @Override
  315 + public void onClick(SelectDialog dialog) {
  316 + dialog.dismiss();
  317 + isShowFollowAddress = false;
  318 + }
  319 + }, "是", new SelectDialog.DialogInterface() {
  320 + @Override
  321 + public void onClick(SelectDialog dialog) {
  322 + dialog.dismiss();
  323 + isShowFollowAddress = false;
  324 + if (null == currentImportLatLng || TextUtils.isEmpty(currentAddress)) {
  325 + return;
  326 + }
  327 + //将点位保存在数据库中
  328 + CollectPoint collectPoint = new CollectPoint();
  329 + collectPoint.setLatitude(currentImportLatLng.latitude);
  330 + collectPoint.setLongitude(currentImportLatLng.longitude);
  331 + collectPoint.setPointName(currentAddress);
  332 + CollStepUtil.setCollImportPoints(getContext(), CollCommonInfo.getUserId(getContext()), collectPoint);
  333 + //将点位显示到地图上
  334 + Overlay overlay = MyMapUtil.setMapMarker(getContext(), baiduMap, currentImportLatLng, R.drawable.icon_map_import);
  335 + if (null != overlay) {
  336 + allMapOverlays.add(overlay);
  337 + }
  338 + //更新可打点数量
  339 + updataCanTakePointCount();
  340 + }
  341 + });
  342 + selectDialog.setCancelable(false);
  343 + selectDialog.setCanceledOnTouchOutside(false);
  344 + }
  345 + }
  346 +
  347 + /**
  348 + * 结束按钮
  349 + */
  350 + private void initFinishSelectDialog() {
  351 + if (endSelectDialog == null) {
  352 + endSelectDialog = new SelectDialog(getContext(), "标题", "否", new SelectDialog.DialogInterface() {
  353 + @Override
  354 + public void onClick(SelectDialog dialog) {
  355 + dialog.dismiss();
  356 + isShowEndFollowAddress = false;
  357 + }
  358 + }, "是", new SelectDialog.DialogInterface() {
  359 + @Override
  360 + public void onClick(SelectDialog dialog) {
  361 + dialog.dismiss();
  362 + isShowEndFollowAddress = false;
  363 + if (null == currentImportLatLng || TextUtils.isEmpty(currentAddress)) {
  364 + return;
  365 + }
  366 + //保存用户完成时间
  367 + CollStepUtil.setCollUserFinishTimeStamp(getContext(), CollCommonInfo.getUserId(getContext()), TimeUtil.getNowTimeStamp());
  368 + //设置终点信息
  369 + CollectPoint collectPoint = new CollectPoint();
  370 + collectPoint.setLatitude(currentImportLatLng.latitude);
  371 + collectPoint.setLongitude(currentImportLatLng.longitude);
  372 + collectPoint.setPointName(currentAddress);
  373 + //设置用户用时
  374 + if (!TextUtils.isEmpty(employTime)) {
  375 + CollStepUtil.setEmployTimeStamp(getContext(), CollCommonInfo.getUserId(getContext()), employTime);
  376 + }
  377 + //将终点数据保存在数据库中
  378 + CollStepUtil.setCollEndPointData(getContext(), CollCommonInfo.getUserId(getContext()), collectPoint);
  379 + //跳转界面
  380 + CollRunningFinishActivity.startActivity(fragment.getActivity());
  381 + }
  382 + });
  383 + endSelectDialog.setCancelable(false);
  384 + endSelectDialog.setCanceledOnTouchOutside(false);
  385 + }
  386 + }
  387 +
178 388 private void initChrom() {
179 389 //设置计时监听
180 390 fragment.binding.chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
... ... @@ -183,6 +393,8 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
183 393 int hour = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60 / 60);
184 394 int minute = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60) % 60;
185 395 int second = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000) % 60;
  396 + employTime = (hour * 3600 + minute * 60 + second) + "";
  397 +
186 398 if (hour < 1) {
187 399 if (minute == 59 && second == 59) {
188 400 chronometer.setFormat("0" + "%s");
... ... @@ -272,9 +484,9 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
272 484 //LocationMode. Device_Sensors:仅使用设备;
273 485 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
274 486 //可选,设置是否需要地址信息,默认不需要
275   - option.setIsNeedAddress(false);
  487 + option.setIsNeedAddress(true);
276 488 //可选,设置是否需要地址描述
277   - option.setIsNeedLocationDescribe(false);
  489 + option.setIsNeedLocationDescribe(true);
278 490 //可选,设置是否需要设备方向结果
279 491 option.setNeedDeviceDirect(false);
280 492 //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
... ... @@ -320,10 +532,88 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
320 532 @Override
321 533 public void onReceiveLocation(BDLocation location) {
322 534 // map view 销毁后不在处理新接收的位置
323   - if (location == null || mMapView == null) {
  535 + if (location == null || mMapView == null || getContext() == null) {
324 536 return;
325 537 }
326 538  
  539 + mCurrentAccracy = location.getRadius();
  540 + followMyLocation = new MyLocationData.Builder()
  541 + .accuracy(location.getRadius())
  542 + // 此处设置开发者获取到的方向信息,顺时针0-360
  543 + .direction(mCurrentDirection).latitude(location.getLatitude())
  544 + .longitude(location.getLongitude()).build();
  545 +// if (followMyLocation == null || followMyLocation.latitude == 0 || followMyLocation.longitude == 0) {
  546 +// return;
  547 +// }
  548 + MapStatus.Builder builder = new MapStatus.Builder();
  549 + //第一次定位
  550 + if (isFirstLoc) {
  551 + isFirstLoc = false;
  552 + if (location.getRadius() > Constant.LOCA_ACCURACY) {
  553 + }
  554 + baiduMap.setMyLocationData(followMyLocation);
  555 + builder.target(new LatLng(followMyLocation.latitude, followMyLocation.longitude)).zoom(DEFULT_ZOOM);
  556 + baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
  557 + } else {
  558 + //不是第一次定位状态
  559 + //过滤定位精度
  560 + if (location.getRadius() > Constant.LOCA_ACCURACY) {
  561 + return;
  562 + }
  563 + if (null != currentWalkPoints && currentWalkPoints.size() > 0) {
  564 + //进行判断
  565 + LatLng lastLatLng = currentWalkPoints.get(currentWalkPoints.size() - 1);
  566 + LatLng curLatLng = new LatLng(location.getLatitude(),
  567 + location.getLongitude());
  568 + if (DistanceUtil.getDistance(lastLatLng, curLatLng) > 0.5) {
  569 + currentWalkPoints.add(curLatLng);
  570 + }
  571 + } else {
  572 + currentWalkPoints.add(new LatLng(location.getLatitude(),
  573 + location.getLongitude()));
  574 + }
  575 +
  576 + //判断当前集合列表是否可以划线(至少两个点)
  577 + if (currentWalkPoints != null && currentWalkPoints.size() > 1) {
  578 + //判断当前是否已经在地图上画点
  579 + if (currentLine != null) {
  580 + currentLine.remove();
  581 + }
  582 + currentLine = MyMapUtil.drawMapLine(getContext(), baiduMap, currentWalkPoints, R.color.green_round);
  583 + }
  584 + }
  585 + Log.e(TAG, "onReceiveLocation: 运行");
  586 + currentAddress = location.getLocationDescribe();
  587 + if (TextUtils.isEmpty(currentAddress)) {
  588 + if (null != location.getAddress()) {
  589 + currentAddress = location.getAddress().address;
  590 + }
  591 + }
  592 +
  593 + if (isShowFollowAddress && !TextUtils.isEmpty(currentAddress)) {
  594 + if (isShowFollowAddress && selectDialog != null && !selectDialog.isShowing()) {
  595 + if (!TextUtils.isEmpty(currentAddress)) {
  596 + selectDialog.setTipMessage("确定将" + "\"" + currentAddress + "\"" + "设置开始地点?");
  597 + if (!selectDialog.isShowing()) {
  598 + selectDialog.show();
  599 + }
  600 + isShowFollowAddress = false;
  601 + }
  602 + }
  603 + }
  604 + //结束按钮
  605 + if (isShowEndFollowAddress && !TextUtils.isEmpty(currentAddress)) {
  606 + if (isShowEndFollowAddress && endSelectDialog != null && !endSelectDialog.isShowing()) {
  607 + if (!TextUtils.isEmpty(currentAddress)) {
  608 + endSelectDialog.setTipMessage("确定将" + "\"" + currentAddress + "\"" + "设为结束地点?");
  609 + if (!endSelectDialog.isShowing()) {
  610 + endSelectDialog.show();
  611 + }
  612 + isShowEndFollowAddress = false;
  613 + }
  614 + }
  615 + }
  616 +
327 617 //正在搜索GPS信号
328 618 if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_UNKNOWN) {
329 619 if (fragment.binding.tvGpsPopBg.getVisibility() != View.VISIBLE) {
... ... @@ -373,66 +663,9 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
373 663 fragment.binding.ivGpsState.setBackground(getContext().getResources().getDrawable(R.drawable.rt_training_gps_3));
374 664 }
375 665 }
  666 + }
376 667  
377   - if (isFirstLoc) {
378   - isFirstLoc = false;
379   - if (location.getRadius() > Constant.LOCA_ACCURACY) {
380   - Toast.makeText(getContext(), "当前定位精度为:" + location.getRadius() + "米,请您移动至空旷地带!", Toast.LENGTH_SHORT).show();
381   - }
382   -
383   -
384   - } else {
385   - //过滤定位精度
386   - if (location.getRadius() > Constant.LOCA_ACCURACY) {
387   - return;
388   - }
389   - }
390   - mCurrentAccracy = location.getRadius();
391   - mylocation = new MyLocationData.Builder()
392   - .accuracy(location.getRadius())
393   - // 此处设置开发者获取到的方向信息,顺时针0-360
394   - .direction(mCurrentDirection).latitude(location.getLatitude())
395   - .longitude(location.getLongitude()).build();
396   - if (mylocation == null || mylocation.latitude == 0 || mylocation.longitude == 0) {
397   - return;
398   - }
399   - MapStatus.Builder builder = new MapStatus.Builder();
400   - //不是第一次定位状态
401   - if (!isFirstLoc) {
402   - baiduMap.setMyLocationData(mylocation);
403   - builder.target(new LatLng(mylocation.latitude, mylocation.longitude)).zoom(DEFULT_ZOOM);
404   - baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
405   - if (currentPoints.size() > 0) {
406   - //进行判断
407   - LatLng lastLatLng = currentPoints.get(currentPoints.size() - 1);
408   - LatLng curLatLng = new LatLng(location.getLatitude(),
409   - location.getLongitude());
410   - if (DistanceUtil.getDistance(lastLatLng, curLatLng) > 0.5) {
411   - currentPoints.add(curLatLng);
412   - }
413   - } else {
414   - currentPoints.add(new LatLng(location.getLatitude(),
415   - location.getLongitude()));
416   - }
417   -
418   - //判断当前集合列表是否可以划线(至少两个点)
419   - if (currentPoints != null && currentPoints.size() > 1) {
420   - //判断当前是否已经在地图上画点
421   - if (currentLine != null) {
422   - currentLine.remove();
423   - }
424   - //开始划线
425   - if (getContext() == null) {
426   - return;
427   - }
428   - currentLine = MyMapUtil.drawMapLine(getContext(), baiduMap, currentPoints, R.color.red);
429   - }
430 668  
431   - }
432   - myCurLatLng = new LatLng(location.getLatitude(),
433   - location.getLongitude());
434   - baiduMap.setMyLocationData(mylocation);
435   - }
436 669 }
437 670  
438 671  
... ... @@ -483,13 +716,13 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
483 716 double x = sensorEvent.values[SensorManager.DATA_X];
484 717 if (Math.abs(x - lastX) > 1.0) {
485 718 mCurrentDirection = (int) x;
486   - if (mylocation != null) {
487   - mylocation = new MyLocationData.Builder()
  719 + if (followMyLocation != null) {
  720 + followMyLocation = new MyLocationData.Builder()
488 721 .accuracy(mCurrentAccracy)
489 722 // 此处设置开发者获取到的方向信息,顺时针0-360
490   - .direction(mCurrentDirection).latitude(mylocation.latitude)
491   - .longitude(mylocation.longitude).build();
492   - baiduMap.setMyLocationData(mylocation);
  723 + .direction(mCurrentDirection).latitude(followMyLocation.latitude)
  724 + .longitude(followMyLocation.longitude).build();
  725 + baiduMap.setMyLocationData(followMyLocation);
493 726 }
494 727 }
495 728 lastX = x;
... ... @@ -506,12 +739,12 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
506 739 * @param lastPoint
507 740 */
508 741 public void setHistoryLastPoint(LatLng lastPoint) {
509   - if (currentPoints != null) {
510   - currentPoints.clear();
511   - currentPoints.add(lastPoint);
  742 + if (currentWalkPoints != null) {
  743 + currentWalkPoints.clear();
  744 + currentWalkPoints.add(lastPoint);
512 745 } else {
513   - currentPoints = new ArrayList<>();
514   - currentPoints.add(lastPoint);
  746 + currentWalkPoints = new ArrayList<>();
  747 + currentWalkPoints.add(lastPoint);
515 748 }
516 749 }
517 750  
... ... @@ -529,6 +762,13 @@ public class CollRunningMapFragmentView implements MvpView, SensorEventListener
529 762 }
530 763  
531 764 public void onDestroy() {
  765 + if (null != allMapOverlays) {
  766 + for (Overlay overlay : allMapOverlays) {
  767 + overlay.remove();
  768 + }
  769 + allMapOverlays = null;
  770 + baiduMap.clear();
  771 + }
532 772 if (mMapView != null) {
533 773 mMapView.onDestroy();
534 774 mMapView = null;
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/CollTraceListDetailFragmentView.java 0 → 100644
  1 +package com.cnlive.moudle.collectionTrace.frame.view;
  2 +
  3 +import android.os.Handler;
  4 +import android.support.v7.widget.LinearLayoutManager;
  5 +import android.text.TextUtils;
  6 +import android.view.MotionEvent;
  7 +import android.view.View;
  8 +
  9 +import com.baidu.mapapi.map.BaiduMap;
  10 +import com.baidu.mapapi.map.MapView;
  11 +import com.baidu.mapapi.map.Overlay;
  12 +import com.baidu.mapapi.map.UiSettings;
  13 +import com.baidu.mapapi.model.LatLng;
  14 +import com.baidu.trace.LBSTraceClient;
  15 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  16 +import com.cnlive.moudle.collectionTrace.model.RaceNameListInfo;
  17 +import com.cnlive.moudle.collectionTrace.ui.adapter.CollFinishDetaiAdapter;
  18 +import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunRaceDetailFragment;
  19 +import com.cnlive.moudle.collectionTrace.ui.fragment.CollTraceListDetailFragment;
  20 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  21 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  22 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
  23 +import com.cnlive.moudle.pedometer.utils.GsonUtil;
  24 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  25 +import com.cnlive.moudle.pedometer.utils.QMUITipDialogUtil;
  26 +import com.cnlive.moudle.pedometer.utils.ScreenUtil;
  27 +import com.cnlive.moudle.pedometer.utils.TimeUtil;
  28 +import com.cnlive.strike.application.GlideApp;
  29 +import com.example.moudle_pedometer.R;
  30 +import com.hannesdorfmann.mosby3.mvp.MvpView;
  31 +import com.sothree.slidinguppanel.SlidingUpPanelLayout;
  32 +
  33 +import java.util.ArrayList;
  34 +import java.util.List;
  35 +
  36 +public class CollTraceListDetailFragmentView implements MvpView {
  37 + private CollTraceListDetailFragment fragment;
  38 + private RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean;
  39 + private CollFinishDetaiAdapter adapter;
  40 + public BaiduMap baiduMap;
  41 + private MapView mMapView;
  42 + private UiSettings mUiSettings;
  43 + private LBSTraceClient mClient = null;
  44 + private List<Overlay> allMapOverlays;
  45 +
  46 + public CollTraceListDetailFragmentView(CollTraceListDetailFragment fragment) {
  47 + this.fragment = fragment;
  48 + }
  49 +
  50 +
  51 + public void initView(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean) {
  52 + if (mClient == null) {
  53 + mClient = new LBSTraceClient(fragment.getActivity());
  54 + }
  55 + this.eventShoeLinesBean = eventShoeLinesBean;
  56 + allMapOverlays = new ArrayList<>();
  57 + //设置滑动卡片
  58 +// fragment.binding.slidingLayout.set
  59 + //添加起点
  60 + CollectPoint startPoint = null;
  61 + List<CollectPoint> resultCollectPoints = null;
  62 + if (!TextUtils.isEmpty(eventShoeLinesBean.getLatLongitude())) {
  63 + resultCollectPoints = GsonUtil.jsonToList(eventShoeLinesBean.getLatLongitude(), CollectPoint.class);
  64 + }
  65 + //获取打点不为空
  66 + if (null != resultCollectPoints && resultCollectPoints.size() > 1) {
  67 + //移除起点
  68 + resultCollectPoints.remove(0);
  69 + //移除终点
  70 + resultCollectPoints.remove(resultCollectPoints.size() - 1);
  71 + }
  72 +
  73 +// //查询用户历史轨迹
  74 +// if (0 != collUserStepEntity.getStartTimeStamp() && 0 != collUserStepEntity.getFinishTimeStamp()) {
  75 +// long startTime = collUserStepEntity.getStartTimeStamp();
  76 +// long endTime = collUserStepEntity.getFinishTimeStamp();
  77 +// //开始查询
  78 +// queryWalkTrace(startTime, endTime);
  79 +// if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
  80 +// List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
  81 +// //绘制运营打的点
  82 +// if (null != collectPoints) {
  83 +// //根据打点集合,自适应缩放
  84 +// MyMapUtil.setCollMapAutoZoom(baiduMap, collectPoints, -1.5f);
  85 +// for (CollectPoint point : collectPoints) {
  86 +// LatLng markLatLng = new LatLng(point.getLatitude(), point.getLongitude());
  87 +// if (null != markLatLng) {
  88 +// //将点位显示到地图上
  89 +// Overlay overlay = MyMapUtil.setMapMarker(getContext(), baiduMap, markLatLng, R.drawable.icon_map_import);
  90 +// if (null != overlay) {
  91 +// allMapOverlays.add(overlay);
  92 +// }
  93 +// }
  94 +// }
  95 +// }
  96 +// }
  97 +// }
  98 +// //设置用户昵称
  99 +// String nickName = CommonInfo.getUserNickName(getContext());
  100 +// fragment.binding.includeFinishUserInfo.tvUserNickName.setText(nickName);
  101 +// //设置用户头像
  102 +// String faceUrl = CommonInfo.getUserIcon(getContext());
  103 +// if (!TextUtils.isEmpty(faceUrl)) {
  104 +// GlideApp.with(getContext()).load(faceUrl).into(fragment.binding.includeFinishUserInfo.qmIvIcon);
  105 +// }
  106 +// //设置标题
  107 +// if (!TextUtils.isEmpty(collUserStepEntity.getStreetTitle())) {
  108 +// fragment.binding.includeFinishUserInfo.tvStreetName.setText(collUserStepEntity.getStreetTitle());
  109 +// }
  110 +// //设置距离
  111 +// if (!TextUtils.isEmpty(collUserStepEntity.getStepCount())) {
  112 +// fragment.binding.includeFinishUserInfo.tvDistance.setText(CollStepUtil.getWalkDistanceKM(Long.parseLong(collUserStepEntity.getStepCount())) + "");
  113 +// } else {
  114 +// fragment.binding.includeFinishUserInfo.tvDistance.setText("0");
  115 +// }
  116 +// if (0 != collUserStepEntity.getFinishTimeStamp()) {
  117 +// //设置日期
  118 +// fragment.binding.includeFinishUserInfo.tvDate.setText(TimeUtil.getStampToTime(collUserStepEntity.getFinishTimeStamp() * 1000, "yyyy-MM-dd HH:mm"));
  119 +// }
  120 +// //设置适配器
  121 +// if (!TextUtils.isEmpty(collUserStepEntity.getImportPoint())) {
  122 +// List<CollectPoint> collectPoints = GsonUtil.jsonToList(collUserStepEntity.getImportPoint(), CollectPoint.class);
  123 +// if (null == collectPoints) {
  124 +// collectPoints = new ArrayList<>();
  125 +// }
  126 +// if (null != startPoint) {
  127 +// collectPoints.add(0, startPoint);
  128 +// }
  129 +// if (null != endPoint) {
  130 +// collectPoints.add(endPoint);
  131 +// }
  132 +// //格式化打的点
  133 +// collectLatLngs = new ArrayList<>();
  134 +// for (CollectPoint collectPoint : collectPoints) {
  135 +// collectLatLngs.add(new com.baidu.trace.model.LatLng(collectPoint.getLatitude(), collectPoint.getLongitude()));
  136 +// }
  137 +// adapter = new CollFinishDetaiAdapter(fragment.getActivity(), collectPoints);
  138 +// //设置
  139 +// fragment.binding.includeFinishUserInfo.rvList.setLayoutManager(new LinearLayoutManager(fragment.getActivity()));
  140 +// fragment.binding.includeFinishUserInfo.rvList.setAdapter(adapter);
  141 +// }
  142 + //返回按钮点击
  143 + fragment.binding.flBack.setOnClickListener(new View.OnClickListener() {
  144 + @Override
  145 + public void onClick(View view) {
  146 + if (fragment.getActivity() == null) {
  147 + return;
  148 + }
  149 + fragment.getActivity().finish();
  150 + }
  151 + });
  152 + fragment.binding.rlScrollViewStartBtn.setVisibility(View.GONE);
  153 + }
  154 +
  155 +
  156 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/RaceNameListView.java
1 1 package com.cnlive.moudle.collectionTrace.frame.view;
2 2  
3 3 import android.support.v7.widget.LinearLayoutManager;
  4 +import android.util.Log;
4 5 import android.view.View;
5 6  
  7 +import com.baidu.trace.LBSTraceClient;
  8 +import com.baidu.trace.api.fence.AddMonitoredPersonResponse;
  9 +import com.baidu.trace.api.fence.CreateFenceResponse;
  10 +import com.baidu.trace.api.fence.DeleteFenceResponse;
  11 +import com.baidu.trace.api.fence.DeleteMonitoredPersonResponse;
  12 +import com.baidu.trace.api.fence.FenceListRequest;
  13 +import com.baidu.trace.api.fence.FenceListResponse;
  14 +import com.baidu.trace.api.fence.HistoryAlarmResponse;
  15 +import com.baidu.trace.api.fence.ListMonitoredPersonResponse;
  16 +import com.baidu.trace.api.fence.MonitoredStatusByLocationResponse;
  17 +import com.baidu.trace.api.fence.MonitoredStatusResponse;
  18 +import com.baidu.trace.api.fence.OnFenceListener;
  19 +import com.baidu.trace.api.fence.UpdateFenceResponse;
  20 +import com.baidu.trace.model.CoordType;
6 21 import com.cnlive.libs.base.util.AlertUtil;
  22 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
7 23 import com.cnlive.moudle.collectionTrace.model.RaceNameListInfo;
8 24 import com.cnlive.moudle.collectionTrace.ui.activity.StartCollectTraceActivity;
9 25 import com.cnlive.moudle.collectionTrace.ui.adapter.RaceNameListAdapter;
10 26 import com.cnlive.moudle.collectionTrace.ui.fragment.RaceNameListFragment;
11 27 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  28 +import com.cnlive.moudle.pedometer.model.Constant;
12 29 import com.cnlive.moudle.pedometer.net.bean.BaseInfo;
  30 +import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
13 31 import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
14 32 import com.example.moudle_pedometer.R;
15 33 import com.hannesdorfmann.mosby3.mvp.MvpView;
... ... @@ -23,11 +41,13 @@ import java.util.List;
23 41 /**
24 42 * Created by hanyayun 019/06/25.
25 43 */
26   -public class RaceNameListView implements MvpView {
  44 +public class RaceNameListView implements MvpView, OnFenceListener {
  45 + private final String TAG = "RaceNameListView";
27 46 RaceNameListFragment fragment;
28 47 public QMUITipDialog loadingDiaog;
29 48 List<RaceNameListInfo.EventShoeLinesBean> list = new ArrayList<>();
30 49 private RaceNameListAdapter adapter;
  50 + private LBSTraceClient mClient = null;
31 51  
32 52 public RaceNameListView(RaceNameListFragment fragment) {
33 53 this.fragment = fragment;
... ... @@ -38,9 +58,21 @@ public class RaceNameListView implements MvpView {
38 58 }
39 59  
40 60  
41   - public void initView(){
  61 + public void initView(RunRaceDetailInfo runRaceDetailInfo) {
  62 + if (mClient == null) {
  63 + mClient = new LBSTraceClient(fragment.getActivity());
  64 + }
42 65 fragment.binding.raceBack.setOnClickListener(v -> fragment.getActivity().finish());
43   - fragment.binding.intoPath.setOnClickListener(v -> StartCollectTraceActivity.newInstance(fragment.getActivity(),fragment.eventId));
  66 +
  67 + fragment.binding.intoPath.setOnClickListener(new View.OnClickListener() {
  68 + @Override
  69 + public void onClick(View view) {
  70 + if (null != runRaceDetailInfo) {
  71 + StartCollectTraceActivity.newInstance(fragment.getActivity(), fragment.eventId, runRaceDetailInfo);
  72 + }
  73 + }
  74 + });
  75 +
44 76 fragment.binding.raceTittle.setText("轨迹列表");
45 77 fragment.binding.refreshLayout.setRefreshHeader(new ClassicsHeader(fragment.getActivity()));
46 78 fragment.binding.refreshLayout.setRefreshFooter(new ClassicsFooter(fragment.getActivity()));
... ... @@ -48,10 +80,10 @@ public class RaceNameListView implements MvpView {
48 80 }
49 81  
50 82  
51   - public void bindingShoeLine(int position){
  83 + public void bindingShoeLine(int position) {
52 84 list.get(position).setIsEnable(0);
53   - for(int i = 0;i <list.size();i++){
54   - if(i != position && list.get(i).getIsEnable() == 0){
  85 + for (int i = 0; i < list.size(); i++) {
  86 + if (i != position && list.get(i).getIsEnable() == 0) {
55 87 list.get(i).setIsEnable(1);
56 88 }
57 89 }
... ... @@ -59,18 +91,18 @@ public class RaceNameListView implements MvpView {
59 91 }
60 92  
61 93  
62   - public void delectShoeLine(int position){
  94 + public void delectShoeLine(int position) {
63 95 list.remove(position);
64 96 adapter.notifyDataSetChanged();
65 97 }
66 98  
67   - public void onSuccess(BaseInfo<RaceNameListInfo> raceNameListInfoBaseInfo){
  99 + public void onSuccess(BaseInfo<RaceNameListInfo> raceNameListInfoBaseInfo) {
68 100 hideLoading();
69   - if(fragment.currentPage == 1){
  101 + if (fragment.currentPage == 1) {
70 102 list.clear();
71 103 list.addAll(raceNameListInfoBaseInfo.getData().getEventShoeLines());
72   - if(adapter == null){
73   - adapter = new RaceNameListAdapter(list,fragment.getActivity());
  104 + if (adapter == null) {
  105 + adapter = new RaceNameListAdapter(list, fragment.getActivity());
74 106 fragment.binding.raceRecy.setAdapter(adapter);
75 107 adapter.setOnItemClick(new RaceNameListAdapter.OnItemClick() {
76 108 @Override
... ... @@ -81,7 +113,7 @@ public class RaceNameListView implements MvpView {
81 113 adapter.setOnAddShoeLineClick(new RaceNameListAdapter.OnAddShoeLineClick() {
82 114 @Override
83 115 public void onAddSholeLineClickListener(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean, int position) {
84   - if(list.get(position).getIsEnable() == 0)return;
  116 + if (list.get(position).getIsEnable() == 0) return;
85 117 SelectDialog selectDialog = new SelectDialog(fragment.getActivity(), "确定绑定该轨迹?", "否", new SelectDialog.DialogInterface() {
86 118 @Override
87 119 public void onClick(SelectDialog dialog) {
... ... @@ -91,7 +123,9 @@ public class RaceNameListView implements MvpView {
91 123 @Override
92 124 public void onClick(SelectDialog dialog) {
93 125 dialog.cancel();
94   - fragment.addShoeLine(eventShoeLinesBean,position);
  126 + //查询当前赛事对应的轨迹列表
  127 + queryFenceList(eventShoeLinesBean.getEventId());
  128 +// fragment.addShoeLine(eventShoeLinesBean, position);
95 129 }
96 130 });
97 131 selectDialog.setCancelable(false);
... ... @@ -103,17 +137,17 @@ public class RaceNameListView implements MvpView {
103 137 adapter.setOnDelectShoeLineClick(new RaceNameListAdapter.OnDelectShoeLineClick() {
104 138 @Override
105 139 public void onDelectShoeLineClickListener(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean, int position) {
106   - if(list.get(position).getIsEnable() == 0)return;
  140 + if (list.get(position).getIsEnable() == 0) return;
107 141 SelectDialog selectDialog = new SelectDialog(fragment.getActivity(), "确定删除该轨迹?", "否", new SelectDialog.DialogInterface() {
108 142 @Override
109 143 public void onClick(SelectDialog dialog) {
110   - dialog.cancel();
  144 + dialog.cancel();
111 145 }
112 146 }, "是", new SelectDialog.DialogInterface() {
113 147 @Override
114 148 public void onClick(SelectDialog dialog) {
115 149 dialog.cancel();
116   - fragment.delectShoeLine(eventShoeLinesBean,position);
  150 + fragment.delectShoeLine(eventShoeLinesBean, position);
117 151 }
118 152 });
119 153 selectDialog.setCancelable(false);
... ... @@ -121,24 +155,24 @@ public class RaceNameListView implements MvpView {
121 155 selectDialog.show();
122 156 }
123 157 });
124   - }else {
  158 + } else {
125 159 adapter.notifyDataSetChanged();
126 160 }
127 161 }
128 162  
129   - if(list.size() != 0){
  163 + if (list.size() != 0) {
130 164 fragment.binding.empty.setVisibility(View.GONE);
131 165 fragment.binding.refreshLayout.setVisibility(View.VISIBLE);
132   - }else {
  166 + } else {
133 167 showEmpty();
134 168 }
135 169  
136   - if(raceNameListInfoBaseInfo.getData().getEventShoeLines().size() < fragment.pageSize){
  170 + if (raceNameListInfoBaseInfo.getData().getEventShoeLines().size() < fragment.pageSize) {
137 171 fragment.binding.refreshLayout.setEnableLoadMore(false);
138   - }else {
  172 + } else {
139 173 fragment.binding.refreshLayout.setEnableLoadMore(true);
140 174 }
141   - if(fragment.currentPage > 1){
  175 + if (fragment.currentPage > 1) {
142 176 list.addAll(raceNameListInfoBaseInfo.getData().getEventShoeLines());
143 177 adapter.notifyDataSetChanged();
144 178 }
... ... @@ -146,7 +180,7 @@ public class RaceNameListView implements MvpView {
146 180 fragment.binding.refreshLayout.finishLoadMore();
147 181 }
148 182  
149   - public void showErr(String msg){
  183 + public void showErr(String msg) {
150 184 fragment.binding.refreshLayout.finishRefresh();
151 185 fragment.binding.refreshLayout.finishLoadMore();
152 186 if (list.size() == 0) {
... ... @@ -158,7 +192,7 @@ public class RaceNameListView implements MvpView {
158 192 @Override
159 193 public void onClick(View v) {
160 194 fragment.currentPage = 1;
161   - fragment.getPresenter().setData(fragment.getActivity(), CommonInfo.getUserId(fragment.getActivity()),fragment.currentPage,fragment.pageSize);
  195 + fragment.getPresenter().setData(fragment.getActivity(), CommonInfo.getUserId(fragment.getActivity()), fragment.currentPage, fragment.pageSize);
162 196 }
163 197 });
164 198 fragment.binding.empty.setLoadingShowing(false);
... ... @@ -174,7 +208,7 @@ public class RaceNameListView implements MvpView {
174 208 AlertUtil.showDeftToast(fragment.getActivity(), message);
175 209 }
176 210  
177   - public void showEmpty(){
  211 + public void showEmpty() {
178 212 fragment.binding.empty.setVisibility(View.VISIBLE);
179 213 fragment.binding.refreshLayout.setVisibility(View.GONE);
180 214 fragment.binding.empty.show("没有相关数据", "", R.drawable.zhuangtai_kong);
... ... @@ -188,4 +222,74 @@ public class RaceNameListView implements MvpView {
188 222 public void hideLoading() {
189 223 if (loadingDiaog != null) loadingDiaog.dismiss();
190 224 }
  225 +
  226 +
  227 + /**
  228 + * 查询地理围栏
  229 + */
  230 + private void queryFenceList(String eventId) {
  231 + FenceListRequest fenceListRequest = FenceListRequest.buildServerRequest(Constant.TAG, Constant.SERVICE_ID, eventId, null, CoordType.gcj02, 1, 5000);
  232 + if (null != mClient || null != fenceListRequest) {
  233 + mClient.queryFenceList(fenceListRequest, RaceNameListView.this);
  234 + }
  235 + }
  236 +
  237 + @Override
  238 + public void onCreateFenceCallback(CreateFenceResponse createFenceResponse) {
  239 +
  240 + }
  241 +
  242 + @Override
  243 + public void onUpdateFenceCallback(UpdateFenceResponse updateFenceResponse) {
  244 +
  245 + }
  246 +
  247 + @Override
  248 + public void onDeleteFenceCallback(DeleteFenceResponse deleteFenceResponse) {
  249 +
  250 + }
  251 +
  252 + /**
  253 + * 查询围栏列表回调接口
  254 + *
  255 + * @param fenceListResponse
  256 + */
  257 + @Override
  258 + public void onFenceListCallback(FenceListResponse fenceListResponse) {
  259 + if (null == fenceListResponse) {
  260 + return;
  261 + }
  262 + Log.e(TAG, "onFenceListCallback:围栏数量 " + fenceListResponse.getFenceInfos().size() + ",fenceListResponse:" + fenceListResponse.getTotalSize());
  263 +
  264 + }
  265 +
  266 + @Override
  267 + public void onMonitoredStatusCallback(MonitoredStatusResponse monitoredStatusResponse) {
  268 +
  269 + }
  270 +
  271 + @Override
  272 + public void onMonitoredStatusByLocationCallback(MonitoredStatusByLocationResponse monitoredStatusByLocationResponse) {
  273 +
  274 + }
  275 +
  276 + @Override
  277 + public void onHistoryAlarmCallback(HistoryAlarmResponse historyAlarmResponse) {
  278 +
  279 + }
  280 +
  281 + @Override
  282 + public void onAddMonitoredPersonCallback(AddMonitoredPersonResponse addMonitoredPersonResponse) {
  283 +
  284 + }
  285 +
  286 + @Override
  287 + public void onDeleteMonitoredPersonCallback(DeleteMonitoredPersonResponse deleteMonitoredPersonResponse) {
  288 +
  289 + }
  290 +
  291 + @Override
  292 + public void onListMonitoredPersonCallback(ListMonitoredPersonResponse listMonitoredPersonResponse) {
  293 +
  294 + }
191 295 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/frame/view/StartTraceFragmentView.java
... ... @@ -29,11 +29,15 @@ import com.baidu.mapapi.map.UiSettings;
29 29 import com.baidu.mapapi.model.LatLng;
30 30 import com.cnlive.moudle.collectionTrace.service.CollKeepLiveService;
31 31 import com.cnlive.moudle.collectionTrace.service.CollStepService;
  32 +import com.cnlive.moudle.collectionTrace.ui.activity.CollRunRaceDetailActivity;
32 33 import com.cnlive.moudle.collectionTrace.ui.activity.CollRunningMapActivity;
33 34 import com.cnlive.moudle.collectionTrace.ui.fragment.StartTraceFragment;
34 35 import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
  36 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  37 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
35 38 import com.cnlive.moudle.pedometer.model.Constant;
36 39 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
  40 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
37 41 import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
38 42 import com.cnlive.moudle.pedometer.utils.BitmapUtil;
39 43 import com.cnlive.moudle.pedometer.utils.GsonUtil;
... ... @@ -108,12 +112,12 @@ public class StartTraceFragmentView implements MvpView, SensorEventListener {
108 112 fragment.binding.btnIdentify.setOnClickListener(new View.OnClickListener() {
109 113 @Override
110 114 public void onClick(View view) {
111   - isShowFollowAddress = true;
112 115 //获取当前地点
113 116 if (!TextUtils.isEmpty(currentAddress)) {
114 117 selectDialog.setTipMessage("确定将" + "\"" + currentAddress + "\"" + "设置开始地点?");
115 118 selectDialog.show();
116 119 } else {
  120 + isShowFollowAddress = true;
117 121 Toast.makeText(getContext(), "正在获取当前地点信息,请稍后", Toast.LENGTH_SHORT).show();
118 122 }
119 123 }
... ... @@ -122,11 +126,77 @@ public class StartTraceFragmentView implements MvpView, SensorEventListener {
122 126 }
123 127  
124 128 /**
  129 + * 检查是否又在正在运行的活动
  130 + */
  131 + public void checkIsHasRunningRace() {
  132 + //先判断有没有数据
  133 + CollUserStepEntity userStepEntity = CollStepUtil.getCollUserStepData(getContext(), CommonInfo.getUserId(getContext()));
  134 + if (null != userStepEntity) {
  135 + String eventId = CollCommonInfo.getStreetId(getContext());
  136 + //判断赛事id是否相同
  137 + String runStreetId = userStepEntity.getStreetId();
  138 + //是相同赛事id
  139 + if (eventId.equals(runStreetId)) {
  140 + //赛事相同(询问用户是否继续
  141 + SelectDialog selectDialog = new SelectDialog(getContext(), "是否继续运动", "否", new SelectDialog.DialogInterface() {
  142 + @Override
  143 + public void onClick(SelectDialog dialog) {
  144 + //删除数据
  145 + CollStepUtil.clearRunData(getContext(), CollCommonInfo.getUserId(getContext()));
  146 + stopStepService();
  147 + //清除数据
  148 + CollCommonInfo.reset(getContext());
  149 + dialog.dismiss();
  150 + }
  151 + }, "是", new SelectDialog.DialogInterface() {
  152 + @Override
  153 + public void onClick(SelectDialog dialog) {
  154 + //继续运动
  155 + dialog.dismiss();
  156 + //检查百度是否正在运行
  157 + checkBaiduServiceState();
  158 +
  159 + }
  160 + });
  161 + selectDialog.setCancelable(false);
  162 + selectDialog.setCanceledOnTouchOutside(false);
  163 + selectDialog.show();
  164 + }
  165 + //赛事id不同,但是有正在进行的赛事
  166 + else {
  167 + //询问用户
  168 + SelectDialog selectDialog = new SelectDialog(getContext(), "你正在进行另一赛事,是否回到该赛事?", "否", new SelectDialog.DialogInterface() {
  169 + @Override
  170 + public void onClick(SelectDialog dialog) {
  171 + //删除数据
  172 + CollStepUtil.clearRunData(getContext(), CollCommonInfo.getUserId(getContext()));
  173 + stopStepService();
  174 + //清除数据
  175 + CollCommonInfo.reset(getContext());
  176 + dialog.dismiss();
  177 + }
  178 + }, "是", new SelectDialog.DialogInterface() {
  179 + @Override
  180 + public void onClick(SelectDialog dialog) {
  181 + //继续运动
  182 + dialog.dismiss();
  183 + //检查百度是否正在运行
  184 + checkBaiduServiceState();
  185 + }
  186 + });
  187 + selectDialog.setCancelable(false);
  188 + selectDialog.setCanceledOnTouchOutside(false);
  189 + selectDialog.show();
  190 + }
  191 + }
  192 + }
  193 +
  194 + /**
125 195 * 启动计步服务
126 196 */
127 197 public void startStepService(Context context) {
128   - CollCommonInfo.setIsFirstStepSendTraceTip(getContext(), true);
129   - QMUITipDialogUtil.loadingDialog(getContext(), "请稍后", false);
  198 + CollCommonInfo.setIsFirstStepSendTraceTip(context, true);
  199 + QMUITipDialogUtil.loadingDialog(context, "请稍后", false);
130 200 if (CollCommonInfo.getStepStartTime(context) == 0) {
131 201 CollCommonInfo.setStepStartTime(context, TimeUtil.getNowTimeStamp());
132 202 }
... ... @@ -149,9 +219,11 @@ public class StartTraceFragmentView implements MvpView, SensorEventListener {
149 219 startStepService(getContext());
150 220 } else {
151 221 CollRunningMapActivity.startActivity(fragment.getActivity(), runRaceDetailInfo);
  222 + fragment.getActivity().finish();
152 223 }
153 224 } else {
154 225 CollRunningMapActivity.startActivity(fragment.getActivity(), runRaceDetailInfo);
  226 + fragment.getActivity().finish();
155 227 }
156 228 }
157 229  
... ... @@ -305,13 +377,12 @@ public class StartTraceFragmentView implements MvpView, SensorEventListener {
305 377 .longitude(location.getLongitude()).build();
306 378 // currentAddress = location.getAddrStr();
307 379 currentAddress = location.getLocationDescribe();
308   - if (selectDialog != null && selectDialog.isShowing()) {
309   - selectDialog.setTipMessage(currentAddress);
310   - }
311 380 if (isShowFollowAddress && selectDialog != null && !selectDialog.isShowing()) {
312 381 if (!TextUtils.isEmpty(currentAddress)) {
313 382 selectDialog.setTipMessage("确定将" + "\"" + currentAddress + "\"" + "设置开始地点?");
314   - selectDialog.show();
  383 + if (!selectDialog.isShowing()) {
  384 + selectDialog.show();
  385 + }
315 386 }
316 387 }
317 388 if (followMyLocation == null || followMyLocation.latitude == 0 || followMyLocation.longitude == 0) {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/model/CollectPoint.java
... ... @@ -3,24 +3,24 @@ package com.cnlive.moudle.collectionTrace.model;
3 3 import com.baidu.mapapi.model.LatLng;
4 4  
5 5 public class CollectPoint {
6   - private double lat;
7   - private double lng;
  6 + private double latitude;
  7 + private double longitude;
8 8 private String pointName;
9 9  
10   - public double getLat() {
11   - return lat;
  10 + public double getLatitude() {
  11 + return latitude;
12 12 }
13 13  
14   - public void setLat(double lat) {
15   - this.lat = lat;
  14 + public void setLatitude(double latitude) {
  15 + this.latitude = latitude;
16 16 }
17 17  
18   - public double getLng() {
19   - return lng;
  18 + public double getLongitude() {
  19 + return longitude;
20 20 }
21 21  
22   - public void setLng(double lng) {
23   - this.lng = lng;
  22 + public void setLongitude(double longitude) {
  23 + this.longitude = longitude;
24 24 }
25 25  
26 26 public String getPointName() {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/model/RaceNameListInfo.java
1 1 package com.cnlive.moudle.collectionTrace.model;
2 2  
  3 +import java.io.Serializable;
3 4 import java.util.List;
4 5  
5 6 /**
6 7 * Created by hanyayun 019/06/25.
7 8 */
8   -public class RaceNameListInfo {
  9 +public class RaceNameListInfo implements Serializable {
9 10  
10 11  
11 12 /**
... ... @@ -32,7 +33,7 @@ public class RaceNameListInfo {
32 33 this.eventShoeLines = eventShoeLines;
33 34 }
34 35  
35   - public static class EventShoeLinesBean {
  36 + public static class EventShoeLinesBean implements Serializable {
36 37 /**
37 38 * entityName : yangshuai
38 39 * startTime : 1560127625
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollPedometerMainActivity.java
... ... @@ -68,9 +68,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity {
68 68 notificationManagerCompat = NotificationManagerCompat.from(this);
69 69 isOpen = notificationManagerCompat.areNotificationsEnabled();
70 70 if (isOpen) {
71   - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
72   -// ContextCompat.startForegroundService(CollPedometerMainActivity.this, new Intent(CollPedometerMainActivity.this, CollStepService.class));
73   - }
  71 + getPermissionsWithTip();
74 72 } else {
75 73 goToSettingNo();
76 74 }
... ... @@ -118,7 +116,7 @@ public class CollPedometerMainActivity extends QMUIFragmentActivity {
118 116 protected void onResume() {
119 117 super.onResume();
120 118 check();
121   - getPermissionsWithTip();
  119 +
122 120 }
123 121  
124 122 private void addFragment(RunRaceDetailInfo runRaceDetailInfo) {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollRunRaceDetailActivity.java
... ... @@ -11,8 +11,13 @@ import com.cnlive.libs.base.ui.QMUIFragment;
11 11 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
12 12 import com.cnlive.libs.base.util.StatusBarUtil;
13 13 import com.cnlive.libs.base.util.StatusBarUtil2;
  14 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
14 15 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunMainFragment;
15 16 import com.cnlive.moudle.collectionTrace.ui.fragment.CollRunRaceDetailFragment;
  17 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  18 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
  19 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
  20 +import com.cnlive.moudle.pedometer.ui.widget.SelectDialog;
16 21 import com.cnlive.moudle.pedometer.utils.CheckUtil;
17 22 import com.example.moudle_pedometer.R;
18 23  
... ... @@ -26,9 +31,11 @@ public class CollRunRaceDetailActivity extends QMUIFragmentActivity {
26 31 private final String TAG = "CollRunRaceDetail";
27 32 private QMUIFragment fragment;
28 33  
29   - public static void newInstance(Context context,String eventId){
30   - Intent intent = new Intent(context,CollRunRaceDetailActivity.class);
31   - intent.putExtra("eventId",eventId);
  34 + public static void newInstance(Context context, String eventId) {
  35 + CollCommonInfo.setStreetId(context, eventId);
  36 + //先判断有没有数据
  37 + Intent intent = new Intent(context, CollRunRaceDetailActivity.class);
  38 + intent.putExtra("eventId", eventId);
32 39 context.startActivity(intent);
33 40 }
34 41  
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollRunningFinishActivity.java
... ... @@ -31,15 +31,13 @@ public class CollRunningFinishActivity extends QMUIFragmentActivity {
31 31 protected void onCreate(Bundle savedInstanceState) {
32 32 super.onCreate(savedInstanceState);
33 33 StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0);
34   - if (getIntent().getSerializableExtra("runningFinishBean") != null) {
35   - addFragment((RunningFinishBean) getIntent().getSerializableExtra("runningFinishBean"));
36   - }
  34 + addFragment();
37 35  
38 36  
39 37 }
40 38  
41   - private void addFragment(RunningFinishBean runningFinishBean) {
42   - QMUIFragment fragment =RunningFinishFragment.instance(runningFinishBean);
  39 + private void addFragment() {
  40 + QMUIFragment fragment =new CollRunningFinishFragment();
43 41 getSupportFragmentManager().beginTransaction()
44 42 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
45 43 .addToBackStack(fragment.getClass().getSimpleName())
... ... @@ -54,9 +52,8 @@ public class CollRunningFinishActivity extends QMUIFragmentActivity {
54 52 }
55 53 }
56 54  
57   - public static void startActivity(Activity activity, RunningFinishBean runningFinishBean) {
  55 + public static void startActivity(Activity activity) {
58 56 Intent intent = new Intent(activity, CollRunningFinishActivity.class);
59   - intent.putExtra("runningFinishBean", runningFinishBean);
60 57 activity.startActivity(intent);
61 58 }
62 59 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/CollTraceListDetailActivity.java 0 → 100644
  1 +package com.cnlive.moudle.collectionTrace.ui.activity;
  2 +
  3 +import android.os.Bundle;
  4 +
  5 +import com.cnlive.libs.base.ui.QMUIFragmentActivity;
  6 +import com.cnlive.moudle.collectionTrace.model.RaceNameListInfo;
  7 +import com.example.moudle_pedometer.R;
  8 +
  9 +/**
  10 + * 轨迹列表详情页
  11 + *
  12 + * @author ShinnyYang
  13 + */
  14 +public class CollTraceListDetailActivity extends QMUIFragmentActivity {
  15 + private RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean;
  16 +
  17 + @Override
  18 + protected int getContextViewId() {
  19 + return R.id.fragment_coll_trace_list_detail;
  20 + }
  21 +
  22 + @Override
  23 + protected void onCreate(Bundle savedInstanceState) {
  24 + super.onCreate(savedInstanceState);
  25 + eventShoeLinesBean = (RaceNameListInfo.EventShoeLinesBean) getIntent().getExtras().get("eventShoeLinesBean");
  26 + }
  27 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/RaceNameListActivity.java
... ... @@ -8,6 +8,7 @@ import android.os.Bundle;
8 8 import com.cnlive.libs.base.util.StatusBarUtil;
9 9 import com.cnlive.libs.base.util.StatusBarUtil2;
10 10 import com.cnlive.moudle.collectionTrace.ui.fragment.RaceNameListFragment;
  11 +import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
11 12 import com.example.moudle_pedometer.R;
12 13  
13 14  
... ... @@ -17,9 +18,10 @@ import com.example.moudle_pedometer.R;
17 18 */
18 19 public class RaceNameListActivity extends AppCompatActivity {
19 20  
20   - public static void newInstance(Context context,String eventId){
21   - Intent intent = new Intent(context,RaceNameListActivity.class);
22   - intent.putExtra("eventId",eventId);
  21 + public static void newInstance(Context context, String eventId, RunRaceDetailInfo runRaceDetailInfo) {
  22 + Intent intent = new Intent(context, RaceNameListActivity.class);
  23 + intent.putExtra("eventId", eventId);
  24 + intent.putExtra("runRaceDetailInfo", runRaceDetailInfo);
23 25 context.startActivity(intent);
24 26 }
25 27  
... ... @@ -29,6 +31,9 @@ public class RaceNameListActivity extends AppCompatActivity {
29 31 StatusBarUtil.setStatusBarWrite(this);
30 32 StatusBarUtil2.setColor(this, getResources().getColor(R.color.white), 0);
31 33 setContentView(R.layout.activity_race_name_list);
32   - getSupportFragmentManager().beginTransaction().replace(R.id.race_container,RaceNameListFragment.newInstance(getIntent().getStringExtra("eventId"))).commit();
  34 + RunRaceDetailInfo runRaceDetailInfo = (RunRaceDetailInfo) getIntent().getExtras().getSerializable("runRaceDetailInfo");
  35 + if (null != runRaceDetailInfo) {
  36 + getSupportFragmentManager().beginTransaction().replace(R.id.race_container, RaceNameListFragment.newInstance(getIntent().getStringExtra("eventId"), runRaceDetailInfo)).commit();
  37 + }
33 38 }
34 39 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/activity/StartCollectTraceActivity.java
1 1 package com.cnlive.moudle.collectionTrace.ui.activity;
2 2  
  3 +import android.Manifest;
3 4 import android.app.Activity;
4 5 import android.content.Context;
5 6 import android.content.Intent;
6 7 import android.os.Bundle;
  8 +import android.provider.Settings;
  9 +import android.support.annotation.NonNull;
  10 +import android.util.Log;
  11 +import android.widget.Toast;
7 12  
8 13 import com.cnlive.libs.base.ui.QMUIFragment;
9 14 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
... ... @@ -11,14 +16,20 @@ import com.cnlive.libs.base.util.StatusBarUtil;
11 16 import com.cnlive.libs.base.util.StatusBarUtil2;
12 17 import com.cnlive.moudle.collectionTrace.ui.fragment.StartTraceFragment;
13 18 import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
  19 +import com.cnlive.moudle.pedometer.utils.MyMapUtil;
  20 +import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsListener;
  21 +import com.cnlive.moudle.pedometer.utils.lib_permisshelper.PermissionsUtils;
14 22 import com.example.moudle_pedometer.R;
15 23  
16 24 public class StartCollectTraceActivity extends QMUIFragmentActivity {
17 25  
  26 + private PermissionsUtils mPermissionsUtils;//权限申请
  27 + private RunRaceDetailInfo runRaceDetailInfo;
18 28  
19   - public static void newInstance(Context context, String eventId) {
  29 + public static void newInstance(Context context, String eventId,RunRaceDetailInfo runRaceDetailInfo) {
20 30 Intent intent = new Intent(context, StartCollectTraceActivity.class);
21 31 intent.putExtra("eventId", eventId);
  32 + intent.putExtra("runRaceDetailInfo", runRaceDetailInfo);
22 33 context.startActivity(intent);
23 34 }
24 35  
... ... @@ -30,15 +41,20 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity {
30 41 @Override
31 42 protected void onCreate(Bundle savedInstanceState) {
32 43 super.onCreate(savedInstanceState);
  44 + mPermissionsUtils = new PermissionsUtils();
33 45 StatusBarUtil.setStatusBarWrite(this);
34 46 StatusBarUtil2.setColor(this, getResources().getColor(R.color.white), 0);
35   - RunRaceDetailInfo runRaceDetailInfo = (RunRaceDetailInfo) getIntent().getExtras().getSerializable("runRaceDetailInfo");
36   - if (null != runRaceDetailInfo) {
37   - addFragment(StartTraceFragment.newInstance(runRaceDetailInfo));
38   - }
  47 + runRaceDetailInfo = (RunRaceDetailInfo) getIntent().getExtras().getSerializable("runRaceDetailInfo");
  48 +
39 49  
40 50 }
41 51  
  52 + @Override
  53 + protected void onResume() {
  54 + super.onResume();
  55 + getPermissionsWithTip();
  56 + }
  57 +
42 58 private void addFragment(QMUIFragment fragment) {
43 59 getSupportFragmentManager().beginTransaction()
44 60 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
... ... @@ -51,4 +67,69 @@ public class StartCollectTraceActivity extends QMUIFragmentActivity {
51 67 intent.putExtra("runRaceDetailInfo", runRaceDetailInfo);
52 68 activity.startActivity(intent);
53 69 }
  70 +
  71 +
  72 + /**
  73 + * 一次申请一组权限(使用拒绝弹框)点击事件
  74 + */
  75 + public void getPermissionsWithTip() {
  76 + mPermissionsUtils
  77 + .setPermissionsListener(new PermissionsListener() {
  78 + @Override
  79 + public void onDenied(String[] deniedPermissions) {
  80 + getPermissionsWithTip();
  81 + }
  82 +
  83 + @Override
  84 + public void onGranted() {
  85 +
  86 + //判断GPS是否开启
  87 + if (!MyMapUtil.isOPenGps(getApplicationContext())) {
  88 + //开启GPS
  89 + Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  90 + startActivityForResult(intent, 10);
  91 + Toast.makeText(getApplicationContext(), getString(R.string.open_gps_tip), Toast.LENGTH_LONG).show();
  92 + } else {
  93 + if (getCurrentFragment() == null) {
  94 + if (null != runRaceDetailInfo) {
  95 + addFragment(StartTraceFragment.newInstance(runRaceDetailInfo));
  96 + }
  97 + }
  98 + }
  99 + }
  100 + })
  101 + .withActivity(StartCollectTraceActivity.this)
  102 + .getPermissions(StartCollectTraceActivity.this
  103 + , 100
  104 + , Manifest.permission.INTERNET
  105 + , Manifest.permission.READ_EXTERNAL_STORAGE
  106 + , Manifest.permission.WRITE_EXTERNAL_STORAGE
  107 + , Manifest.permission.ACCESS_FINE_LOCATION
  108 + , Manifest.permission.ACCESS_COARSE_LOCATION
  109 + );
  110 +// .getPermissionsWithTips(MainActivity.this
  111 +// ,100
  112 +// , new String[]{"人家要录音","我们需要读取你的信息,磨磨唧唧的","我要上网","我要读内存卡","我要看日历","我要定位"}
  113 +// , Manifest.permission.RECORD_AUDIO
  114 +// , Manifest.permission.READ_SMS
  115 +// , Manifest.permission.INTERNET
  116 +// , Manifest.permission.READ_EXTERNAL_STORAGE
  117 +// , Manifest.permission.READ_CALENDAR
  118 +// , Manifest.permission.ACCESS_FINE_LOCATION);
  119 + }
  120 +
  121 +
  122 + /**
  123 + * 权限回调
  124 + *
  125 + * @param requestCode
  126 + * @param permissions
  127 + * @param grantResults
  128 + */
  129 + @Override
  130 + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
  131 + @NonNull int[] grantResults) {
  132 + super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  133 + mPermissionsUtils.dealResult(requestCode, permissions, grantResults);
  134 + }
54 135 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/adapter/CollFinishDetaiAdapter.java 0 → 100644
  1 +package com.cnlive.moudle.collectionTrace.ui.adapter;
  2 +
  3 +import android.app.Activity;
  4 +import android.support.annotation.NonNull;
  5 +import android.support.v7.widget.RecyclerView;
  6 +import android.view.LayoutInflater;
  7 +import android.view.View;
  8 +import android.view.ViewGroup;
  9 +import android.widget.TextView;
  10 +
  11 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
  12 +import com.example.moudle_pedometer.R;
  13 +
  14 +import java.util.ArrayList;
  15 +import java.util.List;
  16 +
  17 +/**
  18 + * @author ShinnyYang
  19 + */
  20 +public class CollFinishDetaiAdapter extends RecyclerView.Adapter<CollFinishDetaiAdapter.MyViewHolder> {
  21 +
  22 + private List<CollectPoint> list = new ArrayList<>();
  23 + private Activity context;
  24 +
  25 + public CollFinishDetaiAdapter(Activity context, List<CollectPoint> list) {
  26 + this.list = list;
  27 + this.context = context;
  28 + }
  29 +
  30 + @NonNull
  31 + @Override
  32 + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  33 + View view = LayoutInflater.from(context).inflate(R.layout.item_coll_take_point, viewGroup, false);
  34 + return new MyViewHolder(view);
  35 + }
  36 +
  37 + @Override
  38 + public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
  39 + //设置打点名称
  40 + if (null == myViewHolder) {
  41 + return;
  42 + }
  43 + if (0 == i) {
  44 + //起点
  45 + myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_green));
  46 + myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_start_point));
  47 + myViewHolder.view_line.setVisibility(View.VISIBLE);
  48 +
  49 + } else if (list.size() - 1 == i) {
  50 + //终点
  51 + myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_red));
  52 + myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_street_end_point));
  53 + myViewHolder.view_line.setVisibility(View.GONE);
  54 + } else {
  55 + myViewHolder.view_line.setVisibility(View.VISIBLE);
  56 + //打点
  57 + myViewHolder.view_circle.setBackground(context.getResources().getDrawable(R.drawable.shape_circle_gray));
  58 +// myViewHolder.tv_point_type_tip.setText(context.getResources().getString(R.string.layout_coll_take_point_text));
  59 + if (i > 0) {
  60 + myViewHolder.tv_point_type_tip.setText("(打点" + i + ")");
  61 + }
  62 +
  63 + }
  64 + myViewHolder.tv_take_point.setText(list.get(i).getPointName());
  65 + }
  66 +
  67 + @Override
  68 + public int getItemCount() {
  69 + return list.size();
  70 + }
  71 +
  72 + class MyViewHolder extends RecyclerView.ViewHolder {
  73 +
  74 + public View view_circle;
  75 + public TextView tv_point_type_tip;
  76 + public TextView tv_take_point;
  77 + public View view_line;
  78 +
  79 +
  80 + public MyViewHolder(@NonNull View itemView) {
  81 + super(itemView);
  82 + this.view_circle = (View) itemView.findViewById(R.id.view_circle);
  83 + this.tv_point_type_tip = (TextView) itemView.findViewById(R.id.tv_point_type_tip);
  84 + this.tv_take_point = (TextView) itemView.findViewById(R.id.tv_take_point);
  85 + this.view_line = (View) itemView.findViewById(R.id.view_line);
  86 + }
  87 + }
  88 +
  89 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/adapter/RunListAdapter.java
... ... @@ -13,6 +13,7 @@ import com.cnlive.moudle.collectionTrace.ui.activity.CollRunRaceDetailActivity;
13 13 import com.cnlive.moudle.collectionTrace.ui.activity.RaceNameListActivity;
14 14 import com.cnlive.moudle.collectionTrace.ui.activity.StartCollectTraceActivity;
15 15 import com.cnlive.moudle.pedometer.net.bean.RunLineInfo;
  16 +import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
16 17 import com.cnlive.moudle.pedometer.utils.TimeUtil;
17 18 import com.example.moudle_pedometer.R;
18 19  
... ... @@ -45,9 +46,25 @@ public class RunListAdapter extends RecyclerView.Adapter&lt;RunListAdapter.MyViewHo
45 46 myViewHolder.activity_time.setText(TimeUtil.getStampToTime(list.get(i).getStart_time(), "yyyy.MM.dd") + "——" + TimeUtil.getStampToTime(list.get(i).getEnd_time(), "yyyy.MM.dd"));
46 47 myViewHolder.line_address.setText(list.get(i).getAddress() + " " + list.get(i).getMileage());
47 48 //添加轨迹
48   - myViewHolder.add_path.setOnClickListener(v -> StartCollectTraceActivity.newInstance(context,list.get(i).getId()+""));
49   - myViewHolder.path_list.setOnClickListener(v -> RaceNameListActivity.newInstance(context,list.get(i).getId()+""));
50   - myViewHolder.item_ly.setOnClickListener(v -> CollRunRaceDetailActivity.newInstance(context,list.get(i).getId()+""));
  49 + myViewHolder.add_path.setOnClickListener(new View.OnClickListener() {
  50 + @Override
  51 + public void onClick(View view) {
  52 + RunRaceDetailInfo runRaceDetailInfo = new RunRaceDetailInfo();
  53 + runRaceDetailInfo.setTitle(list.get(i).getTitle());
  54 + StartCollectTraceActivity.newInstance(context, list.get(i).getId() + "", runRaceDetailInfo);
  55 + }
  56 + });
  57 + myViewHolder.path_list.setOnClickListener(new View.OnClickListener() {
  58 + @Override
  59 + public void onClick(View view) {
  60 + RunRaceDetailInfo runRaceDetailInfo = new RunRaceDetailInfo();
  61 + runRaceDetailInfo.setTitle(list.get(i).getTitle());
  62 + RaceNameListActivity.newInstance(context, list.get(i).getId() + "",runRaceDetailInfo);
  63 +
  64 + }
  65 + });
  66 +
  67 + myViewHolder.item_ly.setOnClickListener(v -> CollRunRaceDetailActivity.newInstance(context, list.get(i).getId() + ""));
51 68 }
52 69  
53 70 @Override
... ... @@ -55,7 +72,7 @@ public class RunListAdapter extends RecyclerView.Adapter&lt;RunListAdapter.MyViewHo
55 72 return list.size();
56 73 }
57 74  
58   - class MyViewHolder extends RecyclerView.ViewHolder{
  75 + class MyViewHolder extends RecyclerView.ViewHolder {
59 76  
60 77 TextView line_name;
61 78 TextView activity_time;
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/CollRunRaceDetailFragment.java
... ... @@ -9,8 +9,10 @@ import android.view.View;
9 9 import android.widget.Button;
10 10  
11 11 import com.cnlive.libs.base.ui.QMUIFragment;
  12 +import com.cnlive.moudle.collectionTrace.commonInfo.CollCommonInfo;
12 13 import com.cnlive.moudle.collectionTrace.frame.presenter.CollRunRaceDetailFragmentPresenter;
13 14 import com.cnlive.moudle.collectionTrace.frame.view.CollRunRaceDetailFragmentView;
  15 +import com.cnlive.moudle.collectionTrace.ui.activity.RaceNameListActivity;
14 16 import com.cnlive.moudle.collectionTrace.ui.activity.StartCollectTraceActivity;
15 17 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
16 18 import com.cnlive.moudle.pedometer.model.Constant;
... ... @@ -59,9 +61,13 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra
59 61 addTraceBtn.setOnClickListener(new View.OnClickListener() {
60 62 @Override
61 63 public void onClick(View view) {
62   - //todo 自己测试用
63   - getActivity().finish();
64   - RunLineActivity.newInstance(getActivity(),null,null,null,null);
  64 + if (null != getMvpView()) {
  65 + if (null != getMvpView().runRaceDetailInfo) {
  66 + RaceNameListActivity.newInstance(getActivity(), CollCommonInfo.getStreetId(getActivity()), getMvpView().runRaceDetailInfo);
  67 + } else {
  68 + QMUITipDialogUtil.failedDialog(getActivity(), "正在获取数据,请稍后", 1);
  69 + }
  70 + }
65 71 }
66 72 });
67 73 }
... ... @@ -74,7 +80,9 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra
74 80 getMvpView().initMap();
75 81 }
76 82 if (getPresenter() != null) {
77   - getPresenter().getRunRaceDetailInfo(getActivity(), "116", CommonInfo.getUserId(getActivity()), "1");
  83 +// getPresenter().getRunRaceDetailInfo(getActivity(), "116", CommonInfo.getUserId(getActivity()), "1");
  84 + getPresenter().getRunRaceDetailInfo(getActivity(), CollCommonInfo.getStreetId(getActivity()), CommonInfo.getUserId(getActivity()), "1");
  85 +
78 86 }
79 87  
80 88 }
... ... @@ -177,5 +185,4 @@ public class CollRunRaceDetailFragment extends QMUIFragment&lt;CollRunRaceDetailFra
177 185 // }
178 186  
179 187  
180   -
181 188 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/CollRunningFinishFragment.java
... ... @@ -7,24 +7,28 @@ import android.view.View;
7 7 import com.cnlive.libs.base.ui.QMUIFragment;
8 8 import com.cnlive.moudle.collectionTrace.frame.presenter.CollRunningFinishFragmetPresenter;
9 9 import com.cnlive.moudle.collectionTrace.frame.view.CollRunningFinishFragmentView;
  10 +import com.cnlive.moudle.collectionTrace.utils.CollStepUtil;
  11 +import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
10 12 import com.cnlive.moudle.pedometer.frame.presenter.RunningFinishFragmetPresenter;
11 13 import com.cnlive.moudle.pedometer.model.RunningFinishBean;
  14 +import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
12 15 import com.example.moudle_pedometer.R;
  16 +import com.example.moudle_pedometer.databinding.FragmentCollFinishRunMapBinding;
13 17 import com.example.moudle_pedometer.databinding.FragmentFinishRunMapBinding;
14 18  
15   -public class CollRunningFinishFragment extends QMUIFragment<CollRunningFinishFragmentView, CollRunningFinishFragmetPresenter, FragmentFinishRunMapBinding> {
16   - private RunningFinishBean runningFinishBean;
  19 +public class CollRunningFinishFragment extends QMUIFragment<CollRunningFinishFragmentView, CollRunningFinishFragmetPresenter, FragmentCollFinishRunMapBinding> {
  20 +// private RunningFinishBean runningFinishBean;
17 21  
18   - public static CollRunningFinishFragment instance(RunningFinishBean runningFinishBean) {
19   - CollRunningFinishFragment fragment = new CollRunningFinishFragment();
20   - Bundle bundle = null;
21   - if (runningFinishBean != null) {
22   - bundle = new Bundle();
23   - bundle.putSerializable("runningFinishBean", runningFinishBean);
24   - }
25   - fragment.setArguments(bundle);
26   - return fragment;
27   - }
  22 +// public static CollRunningFinishFragment instance(RunningFinishBean runningFinishBean) {
  23 +// CollRunningFinishFragment fragment = new CollRunningFinishFragment();
  24 +// Bundle bundle = null;
  25 +// if (runningFinishBean != null) {
  26 +// bundle = new Bundle();
  27 +// bundle.putSerializable("runningFinishBean", runningFinishBean);
  28 +// }
  29 +// fragment.setArguments(bundle);
  30 +// return fragment;
  31 +// }
28 32  
29 33 @Override
30 34 protected int getToolbarId() {
... ... @@ -38,21 +42,23 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra
38 42  
39 43 @Override
40 44 protected int getLayoutId() {
41   - return R.layout.fragment_finish_run_map;
  45 + return R.layout.fragment_coll_finish_run_map;
42 46 }
43 47  
44 48 @Override
45 49 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
46 50 super.onViewCreated(view, savedInstanceState);
47   - if (getArguments() != null) {
48   - runningFinishBean = (RunningFinishBean) getArguments().getSerializable("runningFinishBean");
49   - if (runningFinishBean != null) {
50   - if (getMvpView() != null) {
51   - getMvpView().initView(runningFinishBean);
52   - }
  51 + if (null != getMvpView()) {
  52 + getMvpView().initMap();
  53 + }
  54 + CollUserStepEntity collUserStepEntity = CollStepUtil.getCollUserStepData(getContext(), CommonInfo.getUserId(getContext()));
  55 + if (collUserStepEntity != null) {
  56 + if (getMvpView() != null) {
  57 + getMvpView().initView(collUserStepEntity);
53 58 }
54 59 }
55 60 }
  61 +
56 62 /**
57 63 * 屏蔽边缘返回
58 64 * 杨帅
... ... @@ -64,4 +70,28 @@ public class CollRunningFinishFragment extends QMUIFragment&lt;CollRunningFinishFra
64 70 return 0;
65 71  
66 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 + }
67 97 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/CollTraceListDetailFragment.java 0 → 100644
  1 +package com.cnlive.moudle.collectionTrace.ui.fragment;
  2 +
  3 +import android.os.Bundle;
  4 +import android.support.annotation.Nullable;
  5 +import android.view.View;
  6 +
  7 +import com.cnlive.libs.base.ui.QMUIFragment;
  8 +import com.cnlive.moudle.collectionTrace.frame.presenter.CollTraceListDetailFragmentPresenter;
  9 +import com.cnlive.moudle.collectionTrace.frame.view.CollTraceListDetailFragmentView;
  10 +import com.cnlive.moudle.collectionTrace.model.RaceNameListInfo;
  11 +import com.example.moudle_pedometer.R;
  12 +import com.example.moudle_pedometer.databinding.FragmentCollFinishRunMapBinding;
  13 +
  14 +/**
  15 + * 轨迹列表详情页
  16 + *
  17 + * @author ShinnyYang
  18 + */
  19 +public class CollTraceListDetailFragment extends QMUIFragment<CollTraceListDetailFragmentView, CollTraceListDetailFragmentPresenter, FragmentCollFinishRunMapBinding> {
  20 + private RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean;
  21 +
  22 + public static CollTraceListDetailFragment newInstance(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean) {
  23 + CollTraceListDetailFragment fragment = new CollTraceListDetailFragment();
  24 + Bundle bundle = new Bundle();
  25 + bundle.putSerializable("eventShoeLinesBean", eventShoeLinesBean);
  26 + fragment.setArguments(bundle);
  27 + return fragment;
  28 + }
  29 +
  30 + @Override
  31 + protected int getToolbarId() {
  32 + return 0;
  33 + }
  34 +
  35 + @Override
  36 + public String getTitle() {
  37 + return null;
  38 + }
  39 +
  40 + @Override
  41 + protected int getLayoutId() {
  42 + return R.layout.fragment_coll_finish_run_map;
  43 + }
  44 +
  45 + @Override
  46 + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  47 + super.onViewCreated(view, savedInstanceState);
  48 + if (null != getArguments()) {
  49 + eventShoeLinesBean = (RaceNameListInfo.EventShoeLinesBean) getArguments().get("eventShoeLinesBean");
  50 + if (null != eventShoeLinesBean) {
  51 +
  52 + }
  53 + }
  54 + }
  55 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/RaceNameListFragment.java
... ... @@ -9,25 +9,29 @@ import com.cnlive.libs.base.frame.fragment.MvpBindingFragment;
9 9 import com.cnlive.moudle.collectionTrace.frame.presenter.RaceNameListPresenter;
10 10 import com.cnlive.moudle.collectionTrace.frame.view.RaceNameListView;
11 11 import com.cnlive.moudle.collectionTrace.model.RaceNameListInfo;
  12 +import com.cnlive.moudle.pedometer.net.bean.RunRaceDetailInfo;
12 13 import com.example.moudle_pedometer.R;
13 14 import com.example.moudle_pedometer.databinding.FragmentRaceNameListBinding;
14 15  
15 16 /**
16 17 * Created by hanyayun 019/06/25.
17 18 */
18   -public class RaceNameListFragment extends MvpBindingFragment<RaceNameListView, RaceNameListPresenter,Object, FragmentRaceNameListBinding> {
  19 +public class RaceNameListFragment extends MvpBindingFragment<RaceNameListView, RaceNameListPresenter, Object, FragmentRaceNameListBinding> {
19 20  
20 21 public int currentPage = 1;
21 22 public int pageSize = 10;
22 23 public String eventId;
  24 + private RunRaceDetailInfo runRaceDetailInfo;
23 25  
24   - public static RaceNameListFragment newInstance(String eventId){
  26 + public static RaceNameListFragment newInstance(String eventId, RunRaceDetailInfo runRaceDetailInfo) {
25 27 RaceNameListFragment fragment = new RaceNameListFragment();
26 28 Bundle bundle = new Bundle();
27   - bundle.putString("eventId",eventId);
  29 + bundle.putString("eventId", eventId);
  30 + bundle.putSerializable("runRaceDetailInfo", runRaceDetailInfo);
28 31 fragment.setArguments(bundle);
29 32 return fragment;
30 33 }
  34 +
31 35 public RaceNameListFragment() {
32 36 // Required empty public constructor
33 37 }
... ... @@ -36,16 +40,25 @@ public class RaceNameListFragment extends MvpBindingFragment&lt;RaceNameListView, R
36 40 @Override
37 41 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
38 42 super.onViewCreated(view, savedInstanceState);
39   - if(getMvpView() != null) getMvpView().initView();
40   - eventId = getArguments().getString("eventId");
41   - getPresenter().setData(getActivity(),eventId,currentPage,pageSize);
42   - binding.refreshLayout.setOnRefreshListener(v ->{
  43 +
  44 + if (null != getArguments()) {
  45 + eventId = getArguments().getString("eventId");
  46 + runRaceDetailInfo = (RunRaceDetailInfo) getArguments().getSerializable("runRaceDetailInfo");
  47 + if (null != runRaceDetailInfo) {
  48 + if (getMvpView() != null) {
  49 + getMvpView().initView(runRaceDetailInfo);
  50 + }
  51 + }
  52 +
  53 + }
  54 + getPresenter().setData(getActivity(), eventId, currentPage, pageSize);
  55 + binding.refreshLayout.setOnRefreshListener(v -> {
43 56 currentPage = 1;
44   - getPresenter().setData(getActivity(),eventId,currentPage,pageSize);
  57 + getPresenter().setData(getActivity(), eventId, currentPage, pageSize);
45 58 });
46   - binding.refreshLayout.setOnLoadMoreListener(v ->{
  59 + binding.refreshLayout.setOnLoadMoreListener(v -> {
47 60 currentPage++;
48   - getPresenter().setData(getActivity(),eventId,currentPage,pageSize);
  61 + getPresenter().setData(getActivity(), eventId, currentPage, pageSize);
49 62 });
50 63 }
51 64  
... ... @@ -55,11 +68,11 @@ public class RaceNameListFragment extends MvpBindingFragment&lt;RaceNameListView, R
55 68 }
56 69  
57 70  
58   - public void addShoeLine(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean,int position){
59   - getPresenter().bindingShoeLine(getActivity(),eventShoeLinesBean.getId(),eventShoeLinesBean.getEventId(),position);
  71 + public void addShoeLine(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean, int position) {
  72 + getPresenter().bindingShoeLine(getActivity(), eventShoeLinesBean.getId(), eventShoeLinesBean.getEventId(), position);
60 73 }
61 74  
62   - public void delectShoeLine(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean,int position){
63   - getPresenter().delectShoeLine(getActivity(),eventShoeLinesBean.getId(),position);
  75 + public void delectShoeLine(RaceNameListInfo.EventShoeLinesBean eventShoeLinesBean, int position) {
  76 + getPresenter().delectShoeLine(getActivity(), eventShoeLinesBean.getId(), position);
64 77 }
65 78 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/ui/fragment/StartTraceFragment.java
... ... @@ -77,6 +77,7 @@ public class StartTraceFragment extends QMUIFragment&lt;StartTraceFragmentView, Sta
77 77 //为系统的方向传感器注册监听器
78 78 mSensorManager.registerListener(getMvpView(), mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
79 79 SensorManager.SENSOR_DELAY_UI);
  80 + getMvpView().checkIsHasRunningRace();
80 81 }
81 82 }
82 83  
... ... @@ -118,7 +119,8 @@ public class StartTraceFragment extends QMUIFragment&lt;StartTraceFragmentView, Sta
118 119 if (getMvpView() != null) {
119 120 QMUITipDialogUtil.dismessDialog();
120 121 if (null != getMvpView()) {
121   - CollRunningMapActivity.startActivity(getActivity(),getMvpView().runRaceDetailInfo);
  122 + CollRunningMapActivity.startActivity(getActivity(), getMvpView().runRaceDetailInfo);
  123 + getActivity().finish();
122 124 }
123 125 }
124 126 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/collectionTrace/utils/CollStepUtil.java
... ... @@ -12,6 +12,7 @@ import com.cnlive.moudle.pedometer.sql.db.DbCore;
12 12 import com.cnlive.moudle.pedometer.sql.entity.CollUserStepEntity;
13 13 import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
14 14 import com.cnlive.moudle.pedometer.utils.GsonUtil;
  15 +import com.cnlive.moudle.pedometer.utils.TimeUtil;
15 16  
16 17 import java.text.SimpleDateFormat;
17 18 import java.util.ArrayList;
... ... @@ -33,6 +34,141 @@ public class CollStepUtil {
33 34 }
34 35  
35 36 /**
  37 + * 设置围栏id
  38 + *
  39 + * @param context
  40 + * @param uid
  41 + * @param fenceID
  42 + */
  43 + public static void setFenceId(Context context, String uid, String fenceID) {
  44 + //先获取有没有
  45 + if (getCollUserStepData(context, uid) != null) {
  46 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  47 + if (null != entity) {
  48 + //设置围栏id
  49 + entity.setFenceId(fenceID);
  50 + //更新数据
  51 + updateCollStepData(context, entity);
  52 + }
  53 + }
  54 + }
  55 +
  56 + /**
  57 + * 设置用户整个赛事用时
  58 + *
  59 + * @param context
  60 + * @param uid
  61 + */
  62 + public static void setEmployTimeStamp(Context context, String uid, String employTime) {
  63 + //先获取有没有
  64 + if (getCollUserStepData(context, uid) != null) {
  65 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  66 + if (null != entity) {
  67 + //设置用户完成时间
  68 + entity.setEmployTime(employTime);
  69 + //更新数据
  70 + updateCollStepData(context, entity);
  71 + }
  72 + }
  73 + }
  74 +
  75 + /**
  76 + * 设置用户结束地点数据
  77 + *
  78 + * @param context
  79 + * @param uid
  80 + * @param collectPoint
  81 + */
  82 + public static void setCollEndPointData(Context context, String uid, CollectPoint collectPoint) {
  83 + //先获取有没有
  84 + if (getCollUserStepData(context, uid) != null) {
  85 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  86 + if (null != entity) {
  87 + //设置用户结束数据
  88 + entity.setCollEndPointData(GsonUtil.GsonString(collectPoint));
  89 + //更新数据
  90 + updateCollStepData(context, entity);
  91 + }
  92 + }
  93 + }
  94 +
  95 +
  96 + /**
  97 + * 设置用户结束时间
  98 + *
  99 + * @param context
  100 + * @param uid
  101 + * @param userFinishTime
  102 + */
  103 + public static void setCollUserFinishTimeStamp(Context context, String uid, long userFinishTime) {
  104 + //先获取有没有
  105 + if (getCollUserStepData(context, uid) != null) {
  106 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  107 + if (null != entity) {
  108 + //设置用户完成时间
  109 + entity.setFinishTimeStamp(userFinishTime);
  110 + //更新数据
  111 + updateCollStepData(context, entity);
  112 + }
  113 + }
  114 + }
  115 +
  116 + /**
  117 + * 获取打点详细
  118 + *
  119 + * @param context
  120 + * @param uid
  121 + */
  122 + public static List<CollectPoint> getCollImportPointList(Context context, String uid) {
  123 + //先获取有没有
  124 + if (getCollUserStepData(context, uid) != null) {
  125 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  126 + if (null != entity) {
  127 + //判断有没有打过点
  128 + if (!TextUtils.isEmpty(entity.getImportPoint())) {
  129 + //已经打过点,先把打的点取出来
  130 + List<CollectPoint> lngs = GsonUtil.jsonToList(entity.getImportPoint(), CollectPoint.class);
  131 + if (null != lngs) {
  132 + return lngs;
  133 + } else {
  134 + return null;
  135 + }
  136 + }
  137 + }
  138 + }
  139 + return null;
  140 + }
  141 +
  142 +
  143 + /**
  144 + * 获取打点数量重要点
  145 + *
  146 + * @param context
  147 + * @param uid
  148 + */
  149 + public static int getCollImportPointSize(Context context, String uid) {
  150 + //先获取有没有
  151 + if (getCollUserStepData(context, uid) != null) {
  152 + CollUserStepEntity entity = getCollUserStepData(context, uid);
  153 + if (null != entity) {
  154 + //判断有没有打过点
  155 + if (!TextUtils.isEmpty(entity.getImportPoint())) {
  156 + //已经打过点,先把打的点取出来
  157 + List<CollectPoint> lngs = GsonUtil.jsonToList(entity.getImportPoint(), CollectPoint.class);
  158 + if (null != lngs) {
  159 + return lngs.size();
  160 + } else {
  161 + return 98;
  162 + }
  163 + } else {
  164 + return 0;
  165 + }
  166 + }
  167 + }
  168 + return 98;
  169 + }
  170 +
  171 + /**
36 172 * 初始化数据库
37 173 *
38 174 * @param context
... ... @@ -53,16 +189,13 @@ public class CollStepUtil {
53 189 *
54 190 * @param context
55 191 * @param uid
56   - * @param startPointName
57   - * @param startPointLatLng
58 192 */
59   - public static void setCollStartPointData(Context context, String uid, String startPointName, String startPointLatLng) {
  193 + public static void setCollStartPointData(Context context, String uid, CollectPoint collectPoint) {
60 194 //先获取有没有
61 195 if (getCollUserStepData(context, uid) != null) {
62 196 CollUserStepEntity entity = getCollUserStepData(context, uid);
63 197 if (null != entity) {
64   - entity.setCollStartLatLngName(startPointName);
65   - entity.setCollStartLatLng(startPointLatLng);
  198 + entity.setCollStartPointData(GsonUtil.GsonString(collectPoint));
66 199 //更新数据
67 200 updateCollStepData(context, entity);
68 201 }
... ... @@ -74,9 +207,9 @@ public class CollStepUtil {
74 207 *
75 208 * @param context
76 209 * @param uid
77   - * @param latLng
  210 + * @param collectPoint
78 211 */
79   - public static void setImportPoints(Context context, String uid, LatLng latLng) {
  212 + public static void setCollImportPoints(Context context, String uid, CollectPoint collectPoint) {
80 213 //先获取有没有
81 214 if (getCollUserStepData(context, uid) != null) {
82 215 CollUserStepEntity entity = getCollUserStepData(context, uid);
... ... @@ -84,11 +217,11 @@ public class CollStepUtil {
84 217 //判断有没有打过点
85 218 if (!TextUtils.isEmpty(entity.getImportPoint())) {
86 219 //已经打过点,先把打的点取出来
87   - List<LatLng> lngs = GsonUtil.jsonToList(entity.getImportPoint(), LatLng.class);
  220 + List<CollectPoint> lngs = GsonUtil.jsonToList(entity.getImportPoint(), CollectPoint.class);
88 221 if (null != lngs) {
89 222 //加入新打的点
90   - if (!lngs.contains(latLng)) {
91   - lngs.add(latLng);
  223 + if (!lngs.contains(collectPoint)) {
  224 + lngs.add(collectPoint);
92 225 //重新设置打的点
93 226 entity.setImportPoint(GsonUtil.GsonString(lngs));
94 227 //更新数据
... ... @@ -100,8 +233,8 @@ public class CollStepUtil {
100 233 //没有打过点
101 234 else {
102 235 //则设置一个
103   - List<LatLng> lngs = new ArrayList<>();
104   - lngs.add(latLng);
  236 + List<CollectPoint> lngs = new ArrayList<>();
  237 + lngs.add(collectPoint);
105 238 //重新设置打的点
106 239 entity.setImportPoint(GsonUtil.GsonString(lngs));
107 240 //更新数据
... ... @@ -252,7 +385,7 @@ public class CollStepUtil {
252 385 public static void clearRunData(Context context, String uid) {
253 386 DbCore.init(context, dbName);
254 387 String CURRENT_DATE = getTodayDate();
255   - List<CollUserStepEntity> list = DbCore.getDaoSession().getCollUserStepEntityDao().queryBuilder().where(CollUserStepEntityDao.Properties.UserId.eq(uid), CollUserStepEntityDao.Properties.Date.eq(CURRENT_DATE)).list();
  388 + List<CollUserStepEntity> list = DbCore.getDaoSession().getCollUserStepEntityDao().queryBuilder().where(CollUserStepEntityDao.Properties.UserId.eq(uid)).list();
256 389 if (list != null && list.size() > 0) {
257 390 Log.e(TAG, "clearRunData: " + list.size());
258 391 DbCore.getDaoSession().getCollUserStepEntityDao().deleteByKey(list.get(0).getUserId());
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningFinishFragmentView.java
... ... @@ -9,6 +9,7 @@ import com.baidu.mapapi.map.BaiduMap;
9 9 import com.baidu.mapapi.map.MapView;
10 10 import com.baidu.mapapi.map.UiSettings;
11 11 import com.baidu.mapapi.model.LatLng;
  12 +import com.baidu.trace.LBSTraceClient;
12 13 import com.baidu.trace.model.SortType;
13 14 import com.bumptech.glide.Glide;
14 15 import com.cnlive.moudle.pedometer.commonInfo.CommonInfo;
... ... @@ -31,7 +32,6 @@ public class RunningFinishFragmentView implements MvpView {
31 32 public BaiduMap baiduMap;
32 33 private MapView mMapView;
33 34 private UiSettings mUiSettings;
34   -
35 35 public RunningFinishFragmentView(RunningFinishFragment fragment) {
36 36 this.fragment = fragment;
37 37 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/Constant.java
1 1 package com.cnlive.moudle.pedometer.model;
2 2  
3 3 public class Constant {
4   -// public static final long SERVICE_ID = 213511;//公司账号
  4 + // public static final long SERVICE_ID = 213511;//公司账号
5 5 public static final long SERVICE_ID = 213553;
6 6  
7 7 public static final int TAG = 1;
... ... @@ -15,6 +15,9 @@ public class Constant {
15 15 public static final int FRAGMENT_RUN_CHRONOMETER = 4;//同步计时器
16 16 public static final int EXIT_RANGE = 5;//超出范围
17 17 public static final int ENTER_RANGE = 6;//进入范围
  18 +
  19 +
  20 + /*****************************************运营工具****************************************************/
18 21 public static final int COLL_SERVICE_STEP_COUNT_RESET_SPEED = 3;//重置速度
19 22 public static final int COLL_SERVICE_STEP_COUNT_UPDATE = 0;//步数更新
20 23 public static final int COLL_START_TRACE_GATHER_SUCCESS = 7;//启动轨迹服务成功(运营)
... ... @@ -27,5 +30,7 @@ public class Constant {
27 30 public static final int LOCA_ACCURACY = 20;//定位过滤精度
28 31 public static final int LOCA_END_POINT_ACCURACY = 20;//终点位置比较精度
29 32 public static final int LOCA_START_POINT_ACCURACY = 200;//起点位置比较精度
  33 + public static final int FENCE_OFFSET=70;//围栏偏离距离
  34 + public static final int FENCE_DENOISE=70;//围栏去噪精度
30 35  
31 36 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/net/ApiServiceRunLin.java
... ... @@ -66,6 +66,15 @@ public interface ApiServiceRunLin {
66 66 @POST("Daren/event/getRouteRecordList.action")
67 67 Observable<Result<BaseInfo<SelfRecordInfo>>> getSelfRecordInfo(@QueryMap() Map<String, String> maps);
68 68  
  69 +
  70 + /**
  71 + * 保存个人约跑路线记录
  72 + */
  73 + @POST("Daren/event/routeRecord.action")
  74 + Observable<Result<BaseInfo>> saveRouteData(@QueryMap() Map<String, String> maps);
  75 +
  76 +
  77 +/***********************************************运营人员接口*****************************************************************/
69 78 /**
70 79 * 踩点轨迹列表
71 80 */
... ... @@ -84,15 +93,11 @@ public interface ApiServiceRunLin {
84 93 @POST("Daren/event/bindingShoeLine.action")
85 94 Observable<Result<BaseInfo>> bindingShoeLineInfo(@QueryMap() Map<String, String> maps);
86 95  
87   -
88 96 /**
89   - * 保存个人约跑路线记录
  97 + * http://apiwjjtest.cnlive.com/Daren/event/saveShoeLine.action
  98 + * 运营路线踩点
90 99 */
91   - @POST("Daren/event/routeRecord.action")
92   - Observable<Result<BaseInfo>> saveRouteData(@QueryMap() Map<String, String> maps);
93   -
94   -
95   -
96   -
  100 + @POST("Daren/event/saveShoeLine.action")
  101 + Observable<Result<BaseInfo>> collSaveShoeLine(@QueryMap() Map<String, String> maps);
97 102 }
98 103  
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/dao/CollUserStepEntityDao.java
... ... @@ -40,13 +40,14 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
40 40 public final static Property QueryTraceEndTime = new Property(13, long.class, "queryTraceEndTime", false, "QUERY_TRACE_END_TIME");
41 41 public final static Property QueryEntityName = new Property(14, String.class, "queryEntityName", false, "QUERY_ENTITY_NAME");
42 42 public final static Property ContinueTime = new Property(15, long.class, "continueTime", false, "CONTINUE_TIME");
43   - public final static Property FenceId = new Property(16, long.class, "fenceId", false, "FENCE_ID");
  43 + public final static Property FenceId = new Property(16, String.class, "fenceId", false, "FENCE_ID");
44 44 public final static Property ImportPoint = new Property(17, String.class, "importPoint", false, "IMPORT_POINT");
45 45 public final static Property StreetTitle = new Property(18, String.class, "streetTitle", false, "STREET_TITLE");
46 46 public final static Property EndLatLng = new Property(19, String.class, "endLatLng", false, "END_LAT_LNG");
47 47 public final static Property IsArriveEndPoint = new Property(20, boolean.class, "isArriveEndPoint", false, "IS_ARRIVE_END_POINT");
48   - public final static Property CollStartLatLngName = new Property(21, String.class, "collStartLatLngName", false, "COLL_START_LAT_LNG_NAME");
49   - public final static Property CollStartLatLng = new Property(22, String.class, "collStartLatLng", false, "COLL_START_LAT_LNG");
  48 + public final static Property CollStartPointData = new Property(21, String.class, "collStartPointData", false, "COLL_START_POINT_DATA");
  49 + public final static Property CollEndPointData = new Property(22, String.class, "collEndPointData", false, "COLL_END_POINT_DATA");
  50 + public final static Property EmployTime = new Property(23, String.class, "employTime", false, "EMPLOY_TIME");
50 51 }
51 52  
52 53  
... ... @@ -78,13 +79,14 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
78 79 "\"QUERY_TRACE_END_TIME\" INTEGER NOT NULL ," + // 13: queryTraceEndTime
79 80 "\"QUERY_ENTITY_NAME\" TEXT," + // 14: queryEntityName
80 81 "\"CONTINUE_TIME\" INTEGER NOT NULL ," + // 15: continueTime
81   - "\"FENCE_ID\" INTEGER NOT NULL ," + // 16: fenceId
  82 + "\"FENCE_ID\" TEXT," + // 16: fenceId
82 83 "\"IMPORT_POINT\" TEXT," + // 17: importPoint
83 84 "\"STREET_TITLE\" TEXT," + // 18: streetTitle
84 85 "\"END_LAT_LNG\" TEXT," + // 19: endLatLng
85 86 "\"IS_ARRIVE_END_POINT\" INTEGER NOT NULL ," + // 20: isArriveEndPoint
86   - "\"COLL_START_LAT_LNG_NAME\" TEXT," + // 21: collStartLatLngName
87   - "\"COLL_START_LAT_LNG\" TEXT);"); // 22: collStartLatLng
  87 + "\"COLL_START_POINT_DATA\" TEXT," + // 21: collStartPointData
  88 + "\"COLL_END_POINT_DATA\" TEXT," + // 22: collEndPointData
  89 + "\"EMPLOY_TIME\" TEXT);"); // 23: employTime
88 90 }
89 91  
90 92 /** Drops the underlying database table. */
... ... @@ -136,7 +138,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
136 138 stmt.bindString(15, queryEntityName);
137 139 }
138 140 stmt.bindLong(16, entity.getContinueTime());
139   - stmt.bindLong(17, entity.getFenceId());
  141 +
  142 + String fenceId = entity.getFenceId();
  143 + if (fenceId != null) {
  144 + stmt.bindString(17, fenceId);
  145 + }
140 146  
141 147 String importPoint = entity.getImportPoint();
142 148 if (importPoint != null) {
... ... @@ -154,14 +160,19 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
154 160 }
155 161 stmt.bindLong(21, entity.getIsArriveEndPoint() ? 1L: 0L);
156 162  
157   - String collStartLatLngName = entity.getCollStartLatLngName();
158   - if (collStartLatLngName != null) {
159   - stmt.bindString(22, collStartLatLngName);
  163 + String collStartPointData = entity.getCollStartPointData();
  164 + if (collStartPointData != null) {
  165 + stmt.bindString(22, collStartPointData);
  166 + }
  167 +
  168 + String collEndPointData = entity.getCollEndPointData();
  169 + if (collEndPointData != null) {
  170 + stmt.bindString(23, collEndPointData);
160 171 }
161 172  
162   - String collStartLatLng = entity.getCollStartLatLng();
163   - if (collStartLatLng != null) {
164   - stmt.bindString(23, collStartLatLng);
  173 + String employTime = entity.getEmployTime();
  174 + if (employTime != null) {
  175 + stmt.bindString(24, employTime);
165 176 }
166 177 }
167 178  
... ... @@ -208,7 +219,11 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
208 219 stmt.bindString(15, queryEntityName);
209 220 }
210 221 stmt.bindLong(16, entity.getContinueTime());
211   - stmt.bindLong(17, entity.getFenceId());
  222 +
  223 + String fenceId = entity.getFenceId();
  224 + if (fenceId != null) {
  225 + stmt.bindString(17, fenceId);
  226 + }
212 227  
213 228 String importPoint = entity.getImportPoint();
214 229 if (importPoint != null) {
... ... @@ -226,14 +241,19 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
226 241 }
227 242 stmt.bindLong(21, entity.getIsArriveEndPoint() ? 1L: 0L);
228 243  
229   - String collStartLatLngName = entity.getCollStartLatLngName();
230   - if (collStartLatLngName != null) {
231   - stmt.bindString(22, collStartLatLngName);
  244 + String collStartPointData = entity.getCollStartPointData();
  245 + if (collStartPointData != null) {
  246 + stmt.bindString(22, collStartPointData);
  247 + }
  248 +
  249 + String collEndPointData = entity.getCollEndPointData();
  250 + if (collEndPointData != null) {
  251 + stmt.bindString(23, collEndPointData);
232 252 }
233 253  
234   - String collStartLatLng = entity.getCollStartLatLng();
235   - if (collStartLatLng != null) {
236   - stmt.bindString(23, collStartLatLng);
  254 + String employTime = entity.getEmployTime();
  255 + if (employTime != null) {
  256 + stmt.bindString(24, employTime);
237 257 }
238 258 }
239 259  
... ... @@ -261,13 +281,14 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
261 281 cursor.getLong(offset + 13), // queryTraceEndTime
262 282 cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14), // queryEntityName
263 283 cursor.getLong(offset + 15), // continueTime
264   - cursor.getLong(offset + 16), // fenceId
  284 + cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16), // fenceId
265 285 cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17), // importPoint
266 286 cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18), // streetTitle
267 287 cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19), // endLatLng
268 288 cursor.getShort(offset + 20) != 0, // isArriveEndPoint
269   - cursor.isNull(offset + 21) ? null : cursor.getString(offset + 21), // collStartLatLngName
270   - cursor.isNull(offset + 22) ? null : cursor.getString(offset + 22) // collStartLatLng
  289 + cursor.isNull(offset + 21) ? null : cursor.getString(offset + 21), // collStartPointData
  290 + cursor.isNull(offset + 22) ? null : cursor.getString(offset + 22), // collEndPointData
  291 + cursor.isNull(offset + 23) ? null : cursor.getString(offset + 23) // employTime
271 292 );
272 293 return entity;
273 294 }
... ... @@ -290,13 +311,14 @@ public class CollUserStepEntityDao extends AbstractDao&lt;CollUserStepEntity, Strin
290 311 entity.setQueryTraceEndTime(cursor.getLong(offset + 13));
291 312 entity.setQueryEntityName(cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14));
292 313 entity.setContinueTime(cursor.getLong(offset + 15));
293   - entity.setFenceId(cursor.getLong(offset + 16));
  314 + entity.setFenceId(cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16));
294 315 entity.setImportPoint(cursor.isNull(offset + 17) ? null : cursor.getString(offset + 17));
295 316 entity.setStreetTitle(cursor.isNull(offset + 18) ? null : cursor.getString(offset + 18));
296 317 entity.setEndLatLng(cursor.isNull(offset + 19) ? null : cursor.getString(offset + 19));
297 318 entity.setIsArriveEndPoint(cursor.getShort(offset + 20) != 0);
298   - entity.setCollStartLatLngName(cursor.isNull(offset + 21) ? null : cursor.getString(offset + 21));
299   - entity.setCollStartLatLng(cursor.isNull(offset + 22) ? null : cursor.getString(offset + 22));
  319 + entity.setCollStartPointData(cursor.isNull(offset + 21) ? null : cursor.getString(offset + 21));
  320 + entity.setCollEndPointData(cursor.isNull(offset + 22) ? null : cursor.getString(offset + 22));
  321 + entity.setEmployTime(cursor.isNull(offset + 23) ? null : cursor.getString(offset + 23));
300 322 }
301 323  
302 324 @Override
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/sql/entity/CollUserStepEntity.java
... ... @@ -23,20 +23,20 @@ public class CollUserStepEntity {
23 23 private long queryTraceEndTime;//从服务器获取的结束时间呢
24 24 private String queryEntityName;//从服务器获取的运营人员的实体名称
25 25 private long continueTime;//继续运动时间
26   - private long fenceId;//围栏id
  26 + private String fenceId;//围栏id
27 27 private String importPoint;//关键点
28 28 private String streetTitle;//赛事标题
29 29 private String endLatLng;//终点坐标
30 30 private boolean isArriveEndPoint;//是否到达终点
31   - private String collStartLatLngName;//运营打点名称
32   - private String collStartLatLng;//运营打点名称
33   -
34   - @Generated(hash = 1127995406)
35   - public CollUserStepEntity(String userId, String date, String stepCount, long recordTime, double caloriesCount,
36   - String serverTraceData, long startTimeStamp, long finishTimeStamp, String streetId, int pauseCount,
37   - long userPauseTimeStamp, long chronometerBase, long queryTraceStartTime, long queryTraceEndTime,
38   - String queryEntityName, long continueTime, long fenceId, String importPoint, String streetTitle,
39   - String endLatLng, boolean isArriveEndPoint, String collStartLatLngName, String collStartLatLng) {
  31 + private String collStartPointData;//运营打点名称和经纬度
  32 + private String collEndPointData;//运营结束打点名称和经纬度
  33 + private String employTime;//用时时间戳
  34 +
  35 + @Generated(hash = 297618082)
  36 + public CollUserStepEntity(String userId, String date, String stepCount, long recordTime, double caloriesCount, String serverTraceData, long startTimeStamp,
  37 + long finishTimeStamp, String streetId, int pauseCount, long userPauseTimeStamp, long chronometerBase, long queryTraceStartTime, long queryTraceEndTime,
  38 + String queryEntityName, long continueTime, String fenceId, String importPoint, String streetTitle, String endLatLng, boolean isArriveEndPoint,
  39 + String collStartPointData, String collEndPointData, String employTime) {
40 40 this.userId = userId;
41 41 this.date = date;
42 42 this.stepCount = stepCount;
... ... @@ -58,8 +58,9 @@ public class CollUserStepEntity {
58 58 this.streetTitle = streetTitle;
59 59 this.endLatLng = endLatLng;
60 60 this.isArriveEndPoint = isArriveEndPoint;
61   - this.collStartLatLngName = collStartLatLngName;
62   - this.collStartLatLng = collStartLatLng;
  61 + this.collStartPointData = collStartPointData;
  62 + this.collEndPointData = collEndPointData;
  63 + this.employTime = employTime;
63 64 }
64 65  
65 66 @Generated(hash = 681143087)
... ... @@ -195,13 +196,6 @@ public class CollUserStepEntity {
195 196 this.continueTime = continueTime;
196 197 }
197 198  
198   - public long getFenceId() {
199   - return this.fenceId;
200   - }
201   -
202   - public void setFenceId(long fenceId) {
203   - this.fenceId = fenceId;
204   - }
205 199  
206 200 public String getImportPoint() {
207 201 return this.importPoint;
... ... @@ -235,24 +229,38 @@ public class CollUserStepEntity {
235 229 this.isArriveEndPoint = isArriveEndPoint;
236 230 }
237 231  
238   - public String getCollStartLatLngName() {
239   - return this.collStartLatLngName;
  232 +
  233 + public String getCollStartPointData() {
  234 + return this.collStartPointData;
240 235 }
241 236  
242   - public void setCollStartLatLngName(String collStartLatLngName) {
243   - this.collStartLatLngName = collStartLatLngName;
  237 + public void setCollStartPointData(String collStartPointData) {
  238 + this.collStartPointData = collStartPointData;
244 239 }
245 240  
246   - public String getCollStartLatLng() {
247   - return this.collStartLatLng;
  241 + public String getCollEndPointData() {
  242 + return this.collEndPointData;
248 243 }
249 244  
250   - public void setCollStartLatLng(String collStartLatLng) {
251   - this.collStartLatLng = collStartLatLng;
  245 + public void setCollEndPointData(String collEndPointData) {
  246 + this.collEndPointData = collEndPointData;
252 247 }
253 248  
  249 + public String getEmployTime() {
  250 + return this.employTime;
  251 + }
254 252  
  253 + public void setEmployTime(String employTime) {
  254 + this.employTime = employTime;
  255 + }
  256 +
  257 + public String getFenceId() {
  258 + return this.fenceId;
  259 + }
255 260  
  261 + public void setFenceId(String fenceId) {
  262 + this.fenceId = fenceId;
  263 + }
256 264  
257 265  
258 266 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
... ... @@ -32,6 +32,7 @@ import com.baidu.trace.model.ProcessOption;
32 32 import com.baidu.trace.model.SortType;
33 33 import com.baidu.trace.model.StatusCodes;
34 34 import com.baidu.trace.model.TransportMode;
  35 +import com.cnlive.moudle.collectionTrace.model.CollectPoint;
35 36 import com.cnlive.moudle.pedometer.model.Constant;
36 37 import com.cnlive.moudle.pedometer.model.RoutePoint;
37 38 import com.cnlive.moudle.pedometer.service.StepService;
... ... @@ -52,6 +53,51 @@ public class MyMapUtil {
52 53 private static int pageIndex = 1;
53 54 private static List<LatLng> trackPoints;
54 55  
  56 +
  57 + /**
  58 + * 在地图上进行打点
  59 + *
  60 + * @param context
  61 + * @param baiduMap
  62 + * @param startLatLng
  63 + * @param startIconRes
  64 + * @return
  65 + */
  66 + public static Overlay setMapMarker(Context context, BaiduMap baiduMap, LatLng startLatLng, int startIconRes) {
  67 + if (0 == startIconRes || null == startLatLng || null == context || null == baiduMap) {
  68 + return null;
  69 + }
  70 + try {
  71 + Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 17, 30);
  72 + OverlayOptions startOptions = null;
  73 + if (pointBitmap != null) {
  74 + startOptions = new MarkerOptions()
  75 + .position(startLatLng)
  76 + .icon(BitmapDescriptorFactory.fromBitmap(pointBitmap))
  77 + .animateType(MarkerOptions.MarkerAnimateType.grow);
  78 + }
  79 +
  80 + if (startOptions != null) {
  81 + return baiduMap.addOverlay(startOptions);
  82 +
  83 + } else {
  84 + return null;
  85 + }
  86 + } catch (
  87 + Exception e) {
  88 + return null;
  89 + }
  90 + }
  91 +
  92 + /**
  93 + * 打上运营选择的开始点
  94 + *
  95 + * @param context
  96 + * @param baiduMap
  97 + * @param startLatLng
  98 + * @param startIconRes
  99 + * @return
  100 + */
55 101 public static List<Overlay> setStartMarker(Context context, BaiduMap baiduMap, LatLng startLatLng, int startIconRes) {
56 102 if (0 == startIconRes || null == startLatLng || null == context || null == baiduMap) {
57 103 return null;
... ... @@ -61,7 +107,10 @@ public class MyMapUtil {
61 107 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
62 108 OverlayOptions startOptions = null;
63 109 if (pointBitmap != null) {
64   - startOptions = new MarkerOptions().position(startLatLng).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
  110 + startOptions = new MarkerOptions()
  111 + .position(startLatLng)
  112 + .icon(BitmapDescriptorFactory.fromBitmap(pointBitmap))
  113 + .animateType(MarkerOptions.MarkerAnimateType.grow);
65 114 }
66 115  
67 116 // 添加圆形范围
... ... @@ -118,6 +167,33 @@ public class MyMapUtil {
118 167 }
119 168  
120 169 /**
  170 + * 根据点位信息,自动缩放地图
  171 + *
  172 + * @param baiduMap
  173 + * @param trackPoints
  174 + * @param zoomBy
  175 + */
  176 + public static void setCollMapAutoZoom(BaiduMap baiduMap, List<CollectPoint> trackPoints, float zoomBy) {
  177 + LatLngBounds.Builder builder = new LatLngBounds.Builder();
  178 + List<LatLng> latLngs = new ArrayList<>();
  179 + for (int i = 0; i < trackPoints.size(); i++) {
  180 + latLngs.add(new LatLng(trackPoints.get(i).getLatitude(), trackPoints.get(i).getLongitude()));
  181 + }
  182 + for (LatLng latLng : latLngs) {
  183 + builder.include(latLng);
  184 + }
  185 + MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(builder.build());
  186 + baiduMap.setMapStatus(mapStatusUpdate);
  187 + MapStatusUpdate msu = MapStatusUpdateFactory.zoomBy(zoomBy);
  188 + baiduMap.setMapStatus(msu);
  189 + //自动计算地图缩放
  190 +// MapStatus.Builder builder = new MapStatus.Builder();
  191 +// builder.target(MyMapUtil.getCenterZoomPosition(trackPoints));
  192 +// builder.zoom(MyMapUtil.getZoom(trackPoints));
  193 +// baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
  194 + }
  195 +
  196 + /**
121 197 * 判断用户是否完成比赛
122 198 *
123 199 * @param importPoints
... ... @@ -216,19 +292,19 @@ public class MyMapUtil {
216 292 int total = response.getTotal();
217 293 Log.e(TAG, "onHistoryTrackCallback: " + response.getMessage());
218 294 if (StatusCodes.SUCCESS != response.getStatus()) {
219   -// if (response.getStatus() == 14004) {
220   - //给3次重新查询的机会
221   - if (queryNum < 4) {
222   - //重新查询
223   -// new Handler().postDelayed(new Runnable() {
224   -// @Override
225   -// public void run() {
  295 + if (response.getStatus() == 14004) {
  296 + //给3次重新查询的机会
  297 + if (queryNum < 4) {
  298 + //重新查询
  299 + new Handler().postDelayed(new Runnable() {
  300 + @Override
  301 + public void run() {
226 302 // //间隔3秒查一次
227   - queryHistoryTrace(context, mClient, entityName, startTime, endTime, callBack);
228   - queryNum++;
229   -// }
230   -// }, 1000);
231   -
  303 + queryHistoryTrace(context, mClient, entityName, startTime, endTime, callBack);
  304 + queryNum++;
  305 + }
  306 + }, 1000);
  307 + }
232 308 } else {
233 309 if (callBack != null) {
234 310 callBack.success(null);
... ... @@ -317,18 +393,21 @@ public class MyMapUtil {
317 393 /**
318 394 * 绘制历史轨迹
319 395 */
320   - public static Overlay drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
  396 + public static List<Overlay> drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
321 397 // 绘制新覆盖物前,清空之前的覆盖物
322 398 if (points == null || points.size() == 0 || lineColor == 0) {
323 399 return null;
324 400 }
  401 + List<Overlay> overlayList = new ArrayList<>();
325 402 //只有一个点
326 403 if (points.size() == 1) {
327 404 if (startIconRes != 0) {
328 405 Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
329 406 OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
330   -// .zIndex(9).draggable(true);
331   - return baiduMap.addOverlay(startOptions);
  407 + if (null != startOptions) {
  408 + overlayList.add(baiduMap.addOverlay(startOptions));
  409 + }
  410 + return overlayList;
332 411 } else {
333 412 return null;
334 413 }
... ... @@ -349,8 +428,10 @@ public class MyMapUtil {
349 428 OverlayOptions startOptions = null;
350 429 if (startIconRes != 0) {
351 430 startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 24, 30);
352   - startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
353   - .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  431 + if (null != startPointBitmap && null != startPoint) {
  432 + startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  433 + .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  434 + }
354 435 }
355 436 // .zIndex(9).draggable(true);
356 437 // 添加终点图标
... ... @@ -358,21 +439,35 @@ public class MyMapUtil {
358 439 OverlayOptions endOptions = null;
359 440 if (endIconRes != 0) {
360 441 endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 24, 30);
361   - endOptions = new MarkerOptions().position(endPoint).perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
362   - .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  442 + if (null != endPointBitmap && null != endPoint) {
  443 + endOptions = new MarkerOptions().position(endPoint).perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  444 + .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  445 + }
363 446 }
364 447 // .zIndex(9).draggable(true);
365 448  
366 449 // 添加路线(轨迹)
367   - OverlayOptions polylineOptions = new PolylineOptions().width(10)
368   - .color(context.getResources().getColor(lineColor)).points(points);
  450 + OverlayOptions polylineOptions = null;
  451 + if (null != points) {
  452 + polylineOptions = new PolylineOptions().width(10)
  453 + .color(context.getResources().getColor(lineColor)).points(points);
  454 + }
369 455 if (startOptions != null) {
370   - baiduMap.addOverlay(startOptions);
  456 + overlayList.add(baiduMap.addOverlay(startOptions));
371 457 }
372 458 if (endOptions != null) {
373   - baiduMap.addOverlay(endOptions);
  459 + overlayList.add(baiduMap.addOverlay(endOptions));
  460 + }
  461 + if (null != polylineOptions) {
  462 + overlayList.add(baiduMap.addOverlay(polylineOptions));
  463 + }
  464 + if (null != overlayList) {
  465 + return overlayList;
  466 + } else if (overlayList.size() == 0) {
  467 + return null;
  468 + } else {
  469 + return null;
374 470 }
375   - return baiduMap.addOverlay(polylineOptions);
376 471 }
377 472  
378 473 /**
... ...
moudle_pedometer/src/main/res/drawable-hdpi/icon_map_import.png 0 → 100644

1.4 KB

moudle_pedometer/src/main/res/drawable-xhdpi/icon_map_import.png 0 → 100644

1.21 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/icon_map_import.png 0 → 100644

3.51 KB

moudle_pedometer/src/main/res/layout/fragment_coll_finish_run_map.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto">
  4 +
  5 + <FrameLayout
  6 + android:layout_width="match_parent"
  7 + android:layout_height="match_parent">
  8 +
  9 + <com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:sothree="http://schemas.android.com/apk/res-auto"
  10 + android:id="@+id/sliding_layout"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"
  13 + android:gravity="bottom"
  14 + sothree:umanoDragView="@+id/dragView"
  15 + sothree:umanoFadeColor="@color/black_20"
  16 + sothree:umanoOverlay="true"
  17 + sothree:umanoPanelHeight="250dp"
  18 + sothree:umanoParallaxOffset="0dp"
  19 + sothree:umanoScrollableView="@+id/rv_list"
  20 + sothree:umanoShadowHeight="0dp">
  21 +
  22 + <!-- MAIN CONTENT -->
  23 + <FrameLayout
  24 + android:layout_width="match_parent"
  25 + android:layout_height="match_parent">
  26 +
  27 + <com.baidu.mapapi.map.MapView
  28 + android:id="@+id/mapView"
  29 + android:layout_width="match_parent"
  30 + android:layout_height="match_parent"></com.baidu.mapapi.map.MapView>
  31 + <!--地图上面加一层类似于全透明黑色蒙版-->
  32 + <LinearLayout
  33 + android:layout_width="match_parent"
  34 + android:layout_height="match_parent"
  35 + android:background="#0D000000"
  36 + android:clickable="false"
  37 + android:focusable="false"
  38 + android:focusableInTouchMode="false"></LinearLayout>
  39 +
  40 + <FrameLayout
  41 + android:id="@+id/fl_back"
  42 + android:layout_width="55dp"
  43 + android:layout_height="55dp"
  44 + android:background="@drawable/button_fab_white"
  45 + android:focusable="true">
  46 +
  47 + <ImageView
  48 + android:layout_width="12dp"
  49 + android:layout_height="20dp"
  50 + android:layout_gravity="center"
  51 + android:layout_marginLeft="-2dp"
  52 + android:background="@drawable/icon_back"
  53 + android:focusable="false" />
  54 + </FrameLayout>
  55 +
  56 + <FrameLayout
  57 + android:layout_width="55dp"
  58 + android:layout_height="55dp"
  59 + android:layout_gravity="right"
  60 + android:background="@drawable/button_fab_white"
  61 + android:focusable="true"
  62 + android:visibility="gone">
  63 +
  64 + <ImageView
  65 + android:layout_width="19dp"
  66 + android:layout_height="18dp"
  67 + android:layout_gravity="center"
  68 + android:background="@drawable/icon_share" />
  69 + </FrameLayout>
  70 + <!---->
  71 +
  72 +
  73 + </FrameLayout>
  74 +
  75 + <!-- SLIDING LAYOUT -->
  76 + <FrameLayout
  77 + android:id="@+id/dragView"
  78 + android:layout_width="match_parent"
  79 + android:layout_height="wrap_content"
  80 + android:clickable="true"
  81 + android:focusable="false"
  82 + android:orientation="vertical">
  83 +
  84 +
  85 + <LinearLayout
  86 + android:id="@+id/ll_root"
  87 + android:layout_width="match_parent"
  88 + android:layout_height="wrap_content"
  89 + android:layout_marginBottom="40dp"
  90 + android:orientation="vertical">
  91 +
  92 +
  93 + <!--用户个人信息-->
  94 + <include
  95 + android:id="@+id/include_finish_user_info"
  96 + layout="@layout/layout_coll_finish_user_info" />
  97 + </LinearLayout>
  98 +
  99 +
  100 + </FrameLayout>
  101 + </com.sothree.slidinguppanel.SlidingUpPanelLayout>
  102 + <!--按钮-->
  103 + <LinearLayout
  104 + android:id="@+id/rl_scrollView_startBtn"
  105 + android:layout_width="match_parent"
  106 + android:layout_height="40sp"
  107 + android:layout_gravity="bottom"
  108 + android:focusable="true"
  109 + android:clickable="true"
  110 + android:focusableInTouchMode="true"
  111 + android:background="@color/green_round"
  112 + android:gravity="center"
  113 + android:tag="0">
  114 +
  115 +
  116 + <TextView
  117 + android:id="@+id/tv_run_now"
  118 + android:layout_width="wrap_content"
  119 + android:layout_height="wrap_content"
  120 + android:layout_centerInParent="true"
  121 + android:layout_marginLeft="5dp"
  122 + android:clickable="false"
  123 + android:focusable="false"
  124 + android:focusableInTouchMode="false"
  125 + android:tag="0"
  126 + android:text="确定轨迹"
  127 + android:textColor="@color/white"
  128 + android:textSize="18sp" />
  129 + </LinearLayout>
  130 + </FrameLayout>
  131 +</layout>
0 132 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/fragment_collect_running_map.xml
... ... @@ -50,9 +50,9 @@
50 50 android:layout_width="80dp"
51 51 android:layout_height="35dp"
52 52 android:layout_gravity="right"
53   - android:scaleType="fitXY"
54 53 android:background="@drawable/gps_white_shadow"
55   - android:gravity="center">
  54 + android:gravity="center"
  55 + android:scaleType="fitXY">
56 56  
57 57 <TextView
58 58 android:layout_width="wrap_content"
... ... @@ -121,6 +121,7 @@
121 121 android:layout_height="wrap_content"
122 122 android:layout_gravity="center"
123 123 android:layout_marginBottom="5dp"
  124 + android:focusable="false"
124 125 android:text="打点"
125 126 android:textColor="@color/text_black"
126 127 android:textSize="15sp" />
... ... @@ -148,90 +149,108 @@
148 149  
149 150 <LinearLayout
150 151 android:layout_width="match_parent"
151   - android:layout_height="130dp"
  152 + android:layout_height="140dp"
152 153 android:layout_gravity="bottom"
153 154 android:layout_marginBottom="10dp"
154 155 android:background="@drawable/white_shadow_bg"
  156 + android:orientation="vertical"
155 157 android:scaleX="1.02">
156 158  
  159 + <TextView
  160 + android:id="@+id/tv_can_take_point_size"
  161 + android:layout_width="wrap_content"
  162 + android:layout_height="wrap_content"
  163 + android:layout_marginLeft="30dp"
  164 + android:layout_marginTop="10dp"
  165 + android:text="可打点数量"
  166 + android:textColor="@color/text_black"
  167 + android:textSize="12sp"
  168 + android:textStyle="bold" />
  169 +
157 170 <LinearLayout
158   - android:layout_width="0dp"
159   - android:layout_height="match_parent"
160   - android:layout_weight="1.2"
161   - android:gravity="center"
162   - android:orientation="vertical"
163   - android:paddingLeft="5dp"
164   - android:paddingRight="5dp">
  171 + android:layout_width="match_parent"
  172 + android:layout_height="match_parent">
165 173  
166   - <TextView
167   - android:id="@+id/tv_current_speed"
168   - android:layout_width="wrap_content"
169   - android:layout_height="wrap_content"
170   - android:text="--"
171   - android:textColor="@color/black"
172   - android:textSize="20sp"
173   - android:textStyle="bold" />
  174 + <LinearLayout
  175 + android:layout_width="0dp"
  176 + android:layout_height="match_parent"
  177 + android:layout_weight="1.2"
  178 + android:gravity="center"
  179 + android:orientation="vertical"
  180 + android:paddingLeft="5dp"
  181 + android:paddingRight="5dp">
174 182  
175   - <TextView
176   - android:layout_width="wrap_content"
177   - android:layout_height="wrap_content"
178   - android:layout_marginTop="10dp"
179   - android:text="配速"
180   - android:textColor="@color/black"
181   - android:textSize="15sp" />
182   - </LinearLayout>
  183 + <TextView
  184 + android:id="@+id/tv_current_speed"
  185 + android:layout_width="wrap_content"
  186 + android:layout_height="wrap_content"
  187 + android:text="--"
  188 + android:textColor="@color/black"
  189 + android:textSize="20sp"
  190 + android:textStyle="bold" />
183 191  
184   - <LinearLayout
185   - android:layout_width="0dp"
186   - android:layout_height="match_parent"
187   - android:layout_weight="1.2"
188   - android:gravity="center"
189   - android:orientation="vertical">
  192 + <TextView
  193 + android:layout_width="wrap_content"
  194 + android:layout_height="wrap_content"
  195 + android:layout_marginTop="10dp"
  196 + android:text="配速"
  197 + android:textColor="@color/black"
  198 + android:textSize="15sp" />
  199 + </LinearLayout>
190 200  
191   - <Chronometer
192   - android:id="@+id/chronometer"
193   - android:layout_width="wrap_content"
194   - android:layout_height="wrap_content"
195   - android:format="00:00:00"
196   - android:textColor="@color/black"
197   - android:textSize="20sp"
198   - android:textStyle="bold" />
  201 + <LinearLayout
  202 + android:layout_width="0dp"
  203 + android:layout_height="match_parent"
  204 + android:layout_weight="1.2"
  205 + android:gravity="center"
  206 + android:orientation="vertical">
199 207  
200   - <TextView
201   - android:layout_width="wrap_content"
202   - android:layout_height="wrap_content"
203   - android:layout_marginTop="10dp"
204   - android:text="用时"
205   - android:textColor="@color/black"
206   - android:textSize="15sp" />
207   - </LinearLayout>
  208 + <Chronometer
  209 + android:id="@+id/chronometer"
  210 + android:layout_width="wrap_content"
  211 + android:layout_height="wrap_content"
  212 + android:format="00:00:00"
  213 + android:textColor="@color/black"
  214 + android:textSize="20sp"
  215 + android:textStyle="bold" />
208 216  
  217 + <TextView
  218 + android:layout_width="wrap_content"
  219 + android:layout_height="wrap_content"
  220 + android:layout_marginTop="10dp"
  221 + android:text="用时"
  222 + android:textColor="@color/black"
  223 + android:textSize="15sp" />
  224 + </LinearLayout>
209 225  
210   - <LinearLayout
211   - android:layout_width="0dp"
212   - android:layout_height="match_parent"
213   - android:layout_weight="1"
214   - android:gravity="center"
215   - android:orientation="vertical"
216   - android:paddingLeft="5dp"
217   - android:paddingRight="5dp">
218 226  
219   - <TextView
220   - android:id="@+id/tv_current_diatance"
221   - android:layout_width="wrap_content"
222   - android:layout_height="wrap_content"
223   - android:text="--"
224   - android:textColor="@color/black"
225   - android:textSize="20sp"
226   - android:textStyle="bold" />
  227 + <LinearLayout
  228 + android:layout_width="0dp"
  229 + android:layout_height="match_parent"
  230 + android:layout_marginRight="10dp"
  231 + android:layout_weight="1"
  232 + android:gravity="center"
  233 + android:orientation="vertical"
  234 + android:paddingLeft="5dp"
  235 + android:paddingRight="5dp">
227 236  
228   - <TextView
229   - android:layout_width="wrap_content"
230   - android:layout_height="wrap_content"
231   - android:layout_marginTop="10dp"
232   - android:text="距离(km)"
233   - android:textColor="@color/black"
234   - android:textSize="15sp" />
  237 + <TextView
  238 + android:id="@+id/tv_current_diatance"
  239 + android:layout_width="wrap_content"
  240 + android:layout_height="wrap_content"
  241 + android:text="--"
  242 + android:textColor="@color/black"
  243 + android:textSize="20sp"
  244 + android:textStyle="bold" />
  245 +
  246 + <TextView
  247 + android:layout_width="wrap_content"
  248 + android:layout_height="wrap_content"
  249 + android:layout_marginTop="10dp"
  250 + android:text="距离(km)"
  251 + android:textColor="@color/black"
  252 + android:textSize="15sp" />
  253 + </LinearLayout>
235 254 </LinearLayout>
236 255  
237 256 </LinearLayout>
... ...
moudle_pedometer/src/main/res/layout/item_coll_take_point.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="wrap_content"
  5 + android:orientation="vertical">
  6 +
  7 + <LinearLayout
  8 + android:layout_width="match_parent"
  9 + android:layout_height="wrap_content"
  10 + android:gravity="center_vertical">
  11 +
  12 + <View
  13 + android:id="@+id/view_circle"
  14 + android:layout_width="6dp"
  15 + android:layout_height="6dp"
  16 + android:layout_marginLeft="15dp"
  17 + android:background="@drawable/shape_circle_gray" />
  18 +
  19 + <TextView
  20 + android:id="@+id/tv_point_type_tip"
  21 + android:layout_width="wrap_content"
  22 + android:layout_height="wrap_content"
  23 + android:layout_marginLeft="10dp"
  24 + android:text="@string/layout_coll_take_point_text"
  25 + android:textColor="@color/text_gray"
  26 + android:textSize="12sp" />
  27 +
  28 + <TextView
  29 + android:id="@+id/tv_take_point"
  30 + android:layout_width="wrap_content"
  31 + android:layout_height="wrap_content"
  32 + android:layout_marginLeft="10dp"
  33 + android:text="--"
  34 + android:textColor="@color/black"
  35 + android:textSize="12sp" />
  36 + </LinearLayout>
  37 + <!--竖线-->
  38 + <View
  39 + android:id="@+id/view_line"
  40 + android:layout_width="1dp"
  41 + android:layout_height="18dp"
  42 + android:layout_marginLeft="17dp"
  43 + android:layout_marginTop="-3dp"
  44 + android:background="@color/vertical_line" />
  45 +</LinearLayout>
0 46 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/layout_coll_finish_user_info.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent">
  7 +
  8 + <LinearLayout
  9 + android:layout_width="match_parent"
  10 + android:layout_height="match_parent"
  11 + android:layout_marginTop="30dp"
  12 + android:background="@color/white"
  13 + android:orientation="vertical">
  14 +
  15 + <TextView
  16 + android:id="@+id/tv_user_nickName"
  17 + android:layout_width="wrap_content"
  18 + android:layout_height="wrap_content"
  19 + android:layout_marginLeft="80dp"
  20 + android:layout_marginTop="10dp"
  21 + android:text="--"
  22 + android:textColor="@color/text_black"
  23 + android:textSize="13sp" />
  24 + <!---->
  25 + <LinearLayout
  26 + android:layout_width="match_parent"
  27 + android:layout_height="wrap_content"
  28 + android:gravity="center_vertical">
  29 +
  30 + <LinearLayout
  31 + android:layout_width="0dp"
  32 + android:layout_height="wrap_content"
  33 + android:layout_weight="1"
  34 + android:orientation="vertical">
  35 +
  36 + <TextView
  37 + android:id="@+id/tv_street_name"
  38 + android:layout_width="wrap_content"
  39 + android:layout_height="wrap_content"
  40 + android:layout_marginLeft="15dp"
  41 + android:layout_marginTop="15dp"
  42 + android:text="--"
  43 + android:textColor="@color/text_black"
  44 + android:textSize="15sp" />
  45 +
  46 + <TextView
  47 + android:id="@+id/tv_date"
  48 + android:layout_width="wrap_content"
  49 + android:layout_height="wrap_content"
  50 + android:layout_marginLeft="15dp"
  51 + android:layout_marginTop="5dp"
  52 + android:text="--"
  53 + android:textColor="@color/text_gray"
  54 + android:textSize="10sp" />
  55 + </LinearLayout>
  56 + <!---->
  57 + <LinearLayout
  58 + android:layout_width="0dp"
  59 + android:layout_height="wrap_content"
  60 + android:layout_weight="1"
  61 + android:gravity="right|bottom">
  62 +
  63 + <TextView
  64 + android:id="@+id/tv_distance"
  65 + android:layout_width="wrap_content"
  66 + android:layout_height="wrap_content"
  67 + android:layout_marginRight="10dp"
  68 + android:text="--"
  69 + android:textColor="@color/text_black"
  70 + android:textSize="45sp"
  71 + android:textStyle="bold" />
  72 +
  73 + <TextView
  74 + android:layout_width="wrap_content"
  75 + android:layout_height="wrap_content"
  76 + android:layout_marginRight="15dp"
  77 + android:text="公里"
  78 + android:textColor="@color/text_black"
  79 + android:textSize="15sp" />
  80 + </LinearLayout>
  81 + <!---->
  82 + </LinearLayout>
  83 + <!--横线-->
  84 + <View
  85 + android:layout_width="match_parent"
  86 + android:layout_height="1dp"
  87 + android:layout_marginLeft="10dp"
  88 + android:layout_marginTop="10dp"
  89 + android:layout_marginRight="10dp"
  90 + android:background="@color/line" />
  91 + <!--起点-->
  92 + <!--打点-->
  93 + <LinearLayout
  94 + android:layout_width="match_parent"
  95 + android:layout_height="wrap_content"
  96 + android:layout_marginTop="-3dp"
  97 + android:gravity="center_vertical">
  98 +
  99 + <android.support.v7.widget.RecyclerView
  100 + android:id="@+id/rv_list"
  101 + android:layout_width="match_parent"
  102 + android:layout_height="wrap_content"
  103 + android:paddingTop="10dp"
  104 + android:paddingBottom="10dp"></android.support.v7.widget.RecyclerView>
  105 + </LinearLayout>
  106 + <!---->
  107 + </LinearLayout>
  108 +
  109 + <com.qmuiteam.qmui.widget.QMUIRadiusImageView
  110 + android:id="@+id/qm_iv_icon"
  111 + android:layout_width="60dp"
  112 + android:layout_height="60dp"
  113 + android:layout_marginLeft="10dp"
  114 + android:background="@drawable/tc_ic_workout_level_adjust_coach"
  115 + app:qmui_corner_radius="100dp" />
  116 + </FrameLayout>
  117 +</layout>
0 118 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/values/ids.xml
... ... @@ -14,5 +14,5 @@
14 14 <item name="fragment_all_score_detail" type="id" />
15 15 <!--进行中的活动-->
16 16 <item name="fragment_ongoing" type="id" />
17   -
  17 + <item name="fragment_coll_trace_list_detail" type="id" />
18 18 </resources>
... ...
moudle_pedometer/src/main/res/values/strings.xml
... ... @@ -90,6 +90,7 @@
90 90 <string name="no_fail_line_text_tip">没有上传失败的路线哦</string>
91 91 <string name="run_race_far_tip">您距离起点较远\n请到达起点附近再开始</string>
92 92 <string name="run_race_arrive_end_tip">您已到达终点附近\n可以结束运动了</string>
  93 + <string name="layout_coll_take_point_text">(打点)</string>
93 94  
94 95  
95 96 </resources>
... ...