Commit 50a62a39b04c4700bcc5fd9fa6c3099fbbbceb2a

Authored by 韩亚云
2 parents c7e206f4 d21f413b

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

# Conflicts:
#	moudle_pedometer/src/main/res/drawable-hdpi/more.png
#	moudle_pedometer/src/main/res/drawable-xhdpi/more.png
#	moudle_pedometer/src/main/res/drawable-xxhdpi/more.png
Showing 105 changed files with 1397 additions and 699 deletions
.idea/gradle.xml
... ... @@ -3,6 +3,9 @@
3 3 <component name="GradleSettings">
4 4 <option name="linkedExternalProjectsSettings">
5 5 <GradleProjectSettings>
  6 + <compositeConfiguration>
  7 + <compositeBuild compositeDefinitionSource="SCRIPT" />
  8 + </compositeConfiguration>
6 9 <option name="distributionType" value="DEFAULT_WRAPPED" />
7 10 <option name="externalProjectPath" value="$PROJECT_DIR$" />
8 11 <option name="modules">
... ...
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 : "2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN"
  31 +// BAIDU_MAP_APP_KEY: "OeotXc38bbnU7WmyKGA0VMahk4v35VG2"
32 32 manifestPlaceholders = [
33 33  
34   - BAIDU_MAP_APP_KEY: "OeotXc38bbnU7WmyKGA0VMahk4v35VG2"
  34 + BAIDU_MAP_APP_KEY: "2IIsTtvX2FA88yvDrPZedc2ZvMhxyDbN"
35 35  
36 36  
37 37 ]
38 38 }
39 39 // BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"
  40 +// BAIDU_MAP_APP_KEY: "0bWeo04KKKHqTwozcqgyLZVd0oVhv3rZ"
40 41  
41 42 release {
42 43 resValue("string", "app_name", "网++")
... ... @@ -44,7 +45,7 @@ android {
44 45 buildConfigField("String", "APP_KEY", stringValue("0d57b045ec0c3988a682d94c644e66b9b8e0d2b8ef937d"))
45 46 buildConfigField("String", "APP_SCERET", stringValue("275e8dc29274a1186d82f65bc607c231d02bcb3bfd8976"))
46 47 manifestPlaceholders = [
47   - BAIDU_MAP_APP_KEY: "0bWeo04KKKHqTwozcqgyLZVd0oVhv3rZ"
  48 + BAIDU_MAP_APP_KEY: "Q7y9SGcZVs0tmhbNTiaz0jHm4S1xGzE2"
48 49 ]
49 50 }
50 51 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/presenter/RunningMapFragmentPresenter.java
... ... @@ -59,6 +59,7 @@ import com.baidu.trace.model.TraceLocation;
59 59 import com.baidu.trace.model.TransportMode;
60 60 import com.cnlive.moudle.pedometer.frame.view.RunningMapFragmentView;
61 61 import com.cnlive.moudle.pedometer.model.Constant;
  62 +import com.cnlive.moudle.pedometer.model.RoutePoint;
62 63 import com.cnlive.moudle.pedometer.service.StepService;
63 64 import com.cnlive.moudle.pedometer.utils.BitmapUtil;
64 65 import com.cnlive.moudle.pedometer.utils.CommonUtil;
... ... @@ -127,9 +128,9 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
127 128 //去噪:可设置是否需要去除角度、速度和方向异常的轨迹点
128 129 processOption.setNeedDenoise(true);
129 130 //绑路:设置是否将轨迹点绑定至路网道路
130   - processOption.setNeedMapMatch(true);
  131 + processOption.setNeedMapMatch(false);
131 132 //抽稀:设置是否进行抽稀处理,对冗余的轨迹点进行抽稀去除处理,如一条直线上除起终点外的多个轨迹点
132   -// processOption.setNeedVacuate(true);
  133 + processOption.setNeedVacuate(true);
133 134 //自动判断交通方式
134 135 processOption.setTransportMode(TransportMode.walking);
135 136 // 设置精度过滤值(定位精度大于100米的过滤掉)
... ... @@ -172,14 +173,12 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
172 173 queryHistoryTrace(context, entityName, startTime, endTime);
173 174 } else {
174 175 if (getView() != null) {
175   - List<com.baidu.trace.model.LatLng> fenceLatLngs = new ArrayList<>();
176   -// for (LatLng latLng:trackPoints){
177   -// com.baidu.trace.model.LatLng tempLatLng=new com.baidu.trace.model.LatLng(latLng.latitude,latLng.longitude);
178   -// fenceLatLngs.add(tempLatLng);
179   -// }
180   -// Log.e(TAG, "onHistoryTrackCallback: "+trackPoints.size()+","+ GsonUtil.GsonString(trackPoints));
181   -// createFence(context, fenceLatLngs);
  176 + List<RoutePoint> routePoints = new ArrayList<>();
  177 + for (LatLng latLng : trackPoints) {
  178 + routePoints.add(new RoutePoint(latLng.latitude, latLng.longitude));
  179 + }
182 180 MyMapUtil.drawHistoryTrack(context, getView().baiduMap, trackPoints, SortType.asc, R.color.red, R.drawable.icon_start, R.drawable.icon_end);
  181 +// MyMapUtil.drawMapLineRoutePoint(context, getView().baiduMap, MyMapUtil.optimizePoints(routePoints), R.color.red);
183 182 }
184 183 }
185 184 }
... ... @@ -335,9 +334,13 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
335 334 // 监控状态回调
336 335 @Override
337 336 public void onMonitoredStatusCallback(MonitoredStatusResponse monitoredStatusResponse) {
338   - Toast.makeText(context, "围栏列表回调成功:onMonitoredStatusCallback", Toast.LENGTH_SHORT).show();
339   - //查询监控对象状态响应结果
  337 + if (monitoredStatusResponse.getMonitoredStatusInfos() != null) {
  338 + Toast.makeText(context, "围栏列表回调成功:个数:" + monitoredStatusResponse.getMonitoredStatusInfos().size(), Toast.LENGTH_SHORT).show();
  339 + } //查询监控对象状态响应结果
340 340 List<MonitoredStatusInfo> monitoredStatusInfos = monitoredStatusResponse.getMonitoredStatusInfos();
  341 + if (monitoredStatusInfos == null) {
  342 + return;
  343 + }
341 344 for (MonitoredStatusInfo monitoredStatusInfo : monitoredStatusInfos) {
342 345 monitoredStatusInfo.getFenceId();
343 346 MonitoredStatus status = monitoredStatusInfo.getMonitoredStatus();//获取状态
... ... @@ -406,7 +409,7 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
406 409 }
407 410  
408 411 List<Long> fenid = new ArrayList<>();
409   - fenid.add(111L);
  412 + fenid.add(1L);
410 413 MonitoredStatusRequest request1 = MonitoredStatusRequest.buildServerRequest(1,
411 414 StepService.serviceId, "yangshuai", fenid);
412 415 Handler handler = new Handler();
... ... @@ -414,7 +417,6 @@ public class RunningMapFragmentPresenter extends MvpBasePresenter&lt;RunningMapFrag
414 417 @Override
415 418 public void run() {
416 419 StepService.mClient.queryMonitoredStatus(request1, onFenceListener);
417   -// handler.postDelayed(this, 5000);
418 420 }
419 421 };
420 422 handler.postDelayed(runnable, 5000);
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunMainFragmentView.java
... ... @@ -11,6 +11,7 @@ import android.view.MotionEvent;
11 11 import android.view.View;
12 12 import android.widget.Chronometer;
13 13  
  14 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
14 15 import com.cnlive.moudle.pedometer.model.RunningMapBean;
15 16 import com.cnlive.moudle.pedometer.model.Constant;
16 17 import com.cnlive.moudle.pedometer.model.MessageEvent;
... ... @@ -75,6 +76,9 @@ public class RunMainFragmentView implements MvpView {
75 76 runnable = new Runnable() {
76 77 @Override
77 78 public void run() {
  79 + if (fragment.getActivity() == null) {
  80 + return;
  81 + }
78 82 if (timeCountDown > 1) {
79 83 timeCountDown--;
80 84 fragment.binding.tvTimeCountDown.setVisibility(View.VISIBLE);
... ... @@ -180,7 +184,7 @@ public class RunMainFragmentView implements MvpView {
180 184 public void onClick(View view) {
181 185 //继续记录轨迹
182 186 if (StepService.mClient != null && StepService.traceListener != null) {
183   - StepService.mClient.startGather(StepService.traceListener);
  187 + StepService.mClient.startTrace(StepService.mTrace, StepService.traceListener);
184 188 }
185 189 needWriteDataFlag = true;
186 190 //将当前计时器时间戳写入数据库
... ... @@ -245,6 +249,7 @@ public class RunMainFragmentView implements MvpView {
245 249 SelectDialog selectDialog = new SelectDialog(fragment.getActivity(), "确定结束运动吗?", "确定", new SelectDialog.DialogInterface() {
246 250 @Override
247 251 public void onClick(SelectDialog dialog) {
  252 + MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putBoolean("writeUserStep:" + uid, false);
248 253 fragment.binding.cpCurrent.setVisibility(View.GONE);
249 254 ButtonAnimUtil.setViewDefault(fragment.binding.flStop);
250 255 //清空数据
... ... @@ -256,8 +261,16 @@ public class RunMainFragmentView implements MvpView {
256 261 MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putLong("stepStartTime", 0);
257 262 fragment.getActivity().stopService(new Intent(fragment.getActivity(), StepService.class));
258 263 MySpHelper.getInstance(getContext(), Context.MODE_MULTI_PROCESS).putString("userId", "");
259   - RunningFinishActivity.startActivity(fragment.getActivity());
260   - // fragment.getActivity().finish();
  264 + RunningFinishBean runningFinishBean = new RunningFinishBean();
  265 + runningFinishBean.setStartPoint("开始地点");
  266 + runningFinishBean.setEndPoint("结束地点");
  267 + runningFinishBean.setRunDistance(fragment.binding.tvRunDistance.getText().toString());
  268 + runningFinishBean.setSpeed(fragment.binding.tvSpeed.getText().toString());
  269 + runningFinishBean.setStep(fragment.binding.tvStepCount.getText().toString());
  270 + runningFinishBean.setTime(fragment.binding.chronometer.getText().toString());
  271 + runningFinishBean.setDate(TimeUtil.getFormatNowTime());
  272 + RunningFinishActivity.startActivity(fragment.getActivity(), runningFinishBean);
  273 + fragment.getActivity().finish();
261 274 }
262 275 }, "取消", new SelectDialog.DialogInterface() {
263 276 @Override
... ... @@ -334,7 +347,7 @@ public class RunMainFragmentView implements MvpView {
334 347 //暂停计步
335 348 EventBus.getDefault().post(new MessageEvent(Constant.SERVICE_STEP_COUNT_PAUSE, ""));
336 349 //重置速度
337   - resetSpeed();
  350 +// resetSpeed();
338 351 }
339 352 });
340 353 //gps点击事件
... ... @@ -406,7 +419,7 @@ public class RunMainFragmentView implements MvpView {
406 419 //设置行走公里
407 420 fragment.binding.tvRunDistance.setText(StepUtil.getWalkDistanceKM(step) + "");
408 421 //设置行走步数
409   - fragment.binding.tvStepCount.setText(step + "步");
  422 + fragment.binding.tvStepCount.setText(step+"");
410 423 //设置S速度
411 424 int second = (int) ((SystemClock.elapsedRealtime() - fragment.binding.chronometer.getBase()) / 1000);
412 425 if (second != 0) {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunRaceDetailFragmentView.java
... ... @@ -257,6 +257,16 @@ public class RunRaceDetailFragmentView implements MvpView, SensorEventListener {
257 257 fragment.binding.includeStreet.fiveJoinPerson.setOnClickListener(v -> {
258 258 TakePartActivity.newInstance(fragment.getActivity());
259 259 });
  260 + //返回按钮
  261 + fragment.binding.ivBack.setOnClickListener(new View.OnClickListener() {
  262 + @Override
  263 + public void onClick(View view) {
  264 + if (fragment.getActivity()==null){
  265 + return;
  266 + }
  267 + fragment.getActivity().finish();
  268 + }
  269 + });
260 270 }
261 271  
262 272 private void initMap() {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningFinishFragmentView.java
1 1 package com.cnlive.moudle.pedometer.frame.view;
2 2  
3 3 import android.content.Context;
  4 +import android.view.View;
4 5  
  6 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
5 7 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment;
6 8 import com.cnlive.moudle.pedometer.ui.fragment.RunningMapFragment;
7 9 import com.hannesdorfmann.mosby3.mvp.MvpView;
... ... @@ -16,4 +18,33 @@ public class RunningFinishFragmentView implements MvpView {
16 18 public Context getContext() {
17 19 return fragment == null ? null : fragment.getActivity();
18 20 }
  21 +
  22 + public void initView(RunningFinishBean runningFinishBean) {
  23 + //设置距离
  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());
  39 + //返回按钮点击
  40 + fragment.binding.flBack.setOnClickListener(new View.OnClickListener() {
  41 + @Override
  42 + public void onClick(View view) {
  43 + if (fragment.getActivity() == null) {
  44 + return;
  45 + }
  46 + fragment.getActivity().finish();
  47 + }
  48 + });
  49 + }
19 50 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/frame/view/RunningMapFragmentView.java
... ... @@ -28,8 +28,11 @@ import com.baidu.mapapi.map.MapView;
28 28 import com.baidu.mapapi.map.MarkerOptions;
29 29 import com.baidu.mapapi.map.MyLocationConfiguration;
30 30 import com.baidu.mapapi.map.MyLocationData;
  31 +import com.baidu.mapapi.map.Overlay;
31 32 import com.baidu.mapapi.map.UiSettings;
32 33 import com.baidu.mapapi.model.LatLng;
  34 +import com.baidu.mapapi.utils.DistanceUtil;
  35 +import com.baidu.trace.model.SortType;
33 36 import com.cnlive.moudle.pedometer.model.RunningMapBean;
34 37 import com.cnlive.moudle.pedometer.ui.fragment.RunningMapFragment;
35 38 import com.cnlive.moudle.pedometer.utils.BitmapUtil;
... ... @@ -39,6 +42,7 @@ import com.cnlive.moudle.pedometer.utils.StepUtil;
39 42 import com.example.moudle_pedometer.R;
40 43 import com.hannesdorfmann.mosby3.mvp.MvpView;
41 44  
  45 +import java.util.ArrayList;
42 46 import java.util.List;
43 47  
44 48 public class RunningMapFragmentView implements MvpView, SensorEventListener {
... ... @@ -54,7 +58,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
54 58 private static MyLocationData mylocation;
55 59 boolean isFirstLoc = true; // 是否首次定位
56 60 private MarkerOptions currentMark;
57   - private LatLng firstLatLng;
  61 + private LatLng myCurLatLng;
58 62 private Double lastX = 0.0;
59 63 private int mCurrentDirection = 0;
60 64 private double mCurrentLat = 0.0;
... ... @@ -66,6 +70,8 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
66 70 private final int DEFULT_ZOOM = 17;
67 71 private boolean isFirstLoadMap = true;
68 72 private List<LatLng> trackPoints;
  73 + private Overlay currentLine;
  74 + private List<LatLng> currentPoints;
69 75  
70 76 public RunningMapFragmentView(RunningMapFragment fragment) {
71 77 this.fragment = fragment;
... ... @@ -76,6 +82,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
76 82 }
77 83  
78 84 public void initView(List<LatLng> trackPoints) {
  85 + currentPoints = new ArrayList<>();
79 86 this.trackPoints = trackPoints;
80 87 this.mMapView = fragment.binding.mapView;
81 88 if (baiduMap == null) {
... ... @@ -103,7 +110,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
103 110 mMapView.showZoomControls(false);
104 111 mUiSettings.setEnlargeCenterWithDoubleClickEnable(true);
105 112 //隐藏自带的指南针,改用自定义指南针 杨帅
106   - baiduMap.getUiSettings().setCompassEnabled(true);
  113 + mUiSettings.setCompassEnabled(false);
107 114 //显示定位图层
108 115 baiduMap.setMyLocationEnabled(true);
109 116 // 定位初始化
... ... @@ -111,21 +118,36 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
111 118 mLocClient.registerLocationListener(myListener);
112 119 LocationClientOption option = new LocationClientOption();
113 120 option.setOpenGps(true); // 打开gps
  121 + //可选,设置返回经纬度坐标类型,默认GCJ02
  122 + //GCJ02:国测局坐标;
  123 + //BD09ll:百度经纬度坐标;
  124 + //BD09:百度墨卡托坐标;
  125 + //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
114 126 option.setCoorType("gcj02"); // 设置坐标类型
115 127 //可选,默认false,设置是否开启Gps定位
116 128 option.setOpenGps(true);
117 129 //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
118 130 option.setOpenAutoNotifyMode();
119 131 //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
  132 + //LocationMode.Hight_Accuracy:高精度;
  133 + //LocationMode. Battery_Saving:低功耗;
  134 + //LocationMode. Device_Sensors:仅使用设备;
120 135 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
121 136 //可选,设置是否需要地址信息,默认不需要
122   - option.setIsNeedAddress(true);
  137 + option.setIsNeedAddress(false);
123 138 //可选,设置是否需要地址描述
124   - option.setIsNeedLocationDescribe(true);
  139 + option.setIsNeedLocationDescribe(false);
125 140 //可选,设置是否需要设备方向结果
126 141 option.setNeedDeviceDirect(false);
127 142 //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
  143 + //minTimeInterval - 最短定位时间间隔,单位毫秒,最小值0,开发者可以在设置希望的位置回调最短时间间隔
  144 + //minDistance - 最短定位距离间隔,单位米,最小值0,开发者可以设置希望的位置回调距离间隔
  145 + //locSensitivity - 定位变化敏感程度,LOC_SENSITIVITY_HIGHT,LOC_SENSITIVITY_MIDDLE,LOC_SENSITIVITY_LOW
128 146 option.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT);
  147 + //可选,定位SDK内部是一个service,并放到了独立进程。
  148 + //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
  149 + option.setIgnoreKillProcess(true);
  150 +
129 151 mLocClient.setLocOption(option);
130 152 mLocClient.start();
131 153 //地图加载完毕监听
... ... @@ -142,7 +164,11 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
142 164 new Handler().postDelayed(new Runnable() {
143 165 @Override
144 166 public void run() {
145   - MyMapUtil.drawMapLine(getContext(), baiduMap, trackPoints, R.color.green_50);
  167 + //绘制赛道轨迹
  168 + if (getContext() == null) {
  169 + return;
  170 + }
  171 + MyMapUtil.drawServerLineTrack(getContext(), baiduMap, trackPoints, SortType.asc, R.color.green_50, R.drawable.icon_start, R.drawable.icon_end);
146 172 }
147 173 }, 1500);
148 174 }
... ... @@ -197,6 +223,20 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
197 223 * 定位SDK监听函数
198 224 */
199 225 public class MyLocationListenner extends BDAbstractLocationListener {
  226 + @Override
  227 + public void onLocDiagnosticMessage(int i, int i1, String s) {
  228 + super.onLocDiagnosticMessage(i, i1, s);
  229 + if (getContext() == null) {
  230 + return;
  231 + }
  232 + if (i == 67) {
  233 + Toast.makeText(getContext(), getContext().getString(R.string.loc_check_internet), Toast.LENGTH_SHORT).show();
  234 + } else if (i == 161 && i1 == 1) {
  235 + Toast.makeText(getContext(), getContext().getString(R.string.loc_open_gps), Toast.LENGTH_SHORT).show();
  236 + } else if (i == 161 && i1 == 2) {
  237 + Toast.makeText(getContext(), getContext().getString(R.string.loc_open_wifi), Toast.LENGTH_SHORT).show();
  238 + }
  239 + }
200 240  
201 241 @Override
202 242 public void onReceiveLocation(BDLocation location) {
... ... @@ -228,31 +268,37 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
228 268 return;
229 269 }
230 270 MapStatus.Builder builder = new MapStatus.Builder();
  271 + //不是第一次定位
  272 + if (!isFirstLoc) {
  273 + if (currentPoints.size() > 0) {
  274 + //进行判断
  275 + LatLng lastLatLng = currentPoints.get(currentPoints.size() - 1);
  276 + LatLng curLatLng = new LatLng(location.getLatitude(),
  277 + location.getLongitude());
  278 + if (DistanceUtil.getDistance(lastLatLng, curLatLng) > 0.5) {
  279 + currentPoints.add(curLatLng);
  280 + }
  281 + } else {
  282 + currentPoints.add(new LatLng(location.getLatitude(),
  283 + location.getLongitude()));
  284 + }
231 285  
232   -// if (isFirstLoc) {
233   -// isFirstLoc = false;
234   - firstLatLng = new LatLng(location.getLatitude(),
  286 + //判断当前集合列表是否可以划线(至少两个点)
  287 + if (currentPoints != null && currentPoints.size() > 1) {
  288 + //判断当前是否已经在地图上画点
  289 + if (currentLine != null) {
  290 + currentLine.remove();
  291 + }
  292 + //开始划线
  293 + if (getContext() == null) {
  294 + return;
  295 + }
  296 + currentLine = MyMapUtil.drawMapLine(getContext(), baiduMap, currentPoints, R.color.red);
  297 + }
  298 + }
  299 + myCurLatLng = new LatLng(location.getLatitude(),
235 300 location.getLongitude());
236 301 baiduMap.setMyLocationData(mylocation);
237   -// if (trackPoints!=null){
238   -// Log.e(TAG, "trackPoints: "+MyMapUtil.isInPolygon(firstLatLng,trackPoints) );
239   -// }
240   -// if (isFirstLoc) {
241   -// builder.target(firstLatLng).zoom(DEFULT_ZOOM);
242   -// isFirstLoc = false;
243   -// } else {
244   -// float current = baiduMap.getMapStatus().zoom;
245   -// builder.target(firstLatLng).zoom(current);
246   -//
247   -// }
248   -// baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
249   -// //显示当前位置图标
250   -// Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(getContext(), BitmapFactory.decodeResource(getContext().getResources(), R.drawable.rt_ic_location), 40, 40);
251   -// currentMark = new MarkerOptions().position(firstLatLng).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
252   -// baiduMap.addOverlay(currentMark);
253   -
254   -
255   -// }
256 302 }
257 303 }
258 304  
... ... @@ -342,6 +388,7 @@ public class RunningMapFragmentView implements MvpView, SensorEventListener {
342 388  
343 389 }
344 390  
  391 +
345 392 public void onResume() {
346 393 if (mMapView != null) {
347 394 mMapView.onResume();
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/Constant.java
... ... @@ -6,5 +6,7 @@ public class Constant {
6 6 public static final int SERVICE_STEP_COUNT_CONTINUE = 2;//继续计步
7 7 public static final int SERVICE_STEP_COUNT_RESET_SPEED = 3;//重置速度
8 8 public static final int FRAGMENT_RUN_CHRONOMETER = 4;//同步计时器
  9 + public static final int EXIT_RANGE = 5;//超出范围
  10 + public static final int ENTER_RANGE = 6;//进入范围
9 11  
10 12 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/RoutePoint.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.model;
  2 +
  3 +public class RoutePoint {
  4 + private double lat;
  5 + private double lng;
  6 +
  7 + public RoutePoint() {
  8 + }
  9 +
  10 + public RoutePoint(double lat, double lng) {
  11 + this.lat = lat;
  12 + this.lng = lng;
  13 + }
  14 +
  15 + public double getLat() {
  16 + return lat;
  17 + }
  18 +
  19 + public void setLat(double lat) {
  20 + this.lat = lat;
  21 + }
  22 +
  23 + public double getLng() {
  24 + return lng;
  25 + }
  26 +
  27 + public void setLng(double lng) {
  28 + this.lng = lng;
  29 + }
  30 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/model/RunningFinishBean.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.model;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +/**
  6 + * 跑步结束相关数据
  7 + *
  8 + * @author ShinnyYang
  9 + */
  10 +public class RunningFinishBean implements Serializable {
  11 + private String runDistance;
  12 + private String speed;
  13 + private String time;
  14 + private String step;
  15 + private String startPoint;
  16 + private String endPoint;
  17 + private String date;
  18 +
  19 + public String getRunDistance() {
  20 + return runDistance;
  21 + }
  22 +
  23 + public void setRunDistance(String runDistance) {
  24 + this.runDistance = runDistance;
  25 + }
  26 +
  27 + public String getSpeed() {
  28 + return speed;
  29 + }
  30 +
  31 + public void setSpeed(String speed) {
  32 + this.speed = speed;
  33 + }
  34 +
  35 + public String getTime() {
  36 + return time;
  37 + }
  38 +
  39 + public void setTime(String time) {
  40 + this.time = time;
  41 + }
  42 +
  43 + public String getStep() {
  44 + return step;
  45 + }
  46 +
  47 + public void setStep(String step) {
  48 + this.step = step;
  49 + }
  50 +
  51 + public String getStartPoint() {
  52 + return startPoint;
  53 + }
  54 +
  55 + public void setStartPoint(String startPoint) {
  56 + this.startPoint = startPoint;
  57 + }
  58 +
  59 + public String getEndPoint() {
  60 + return endPoint;
  61 + }
  62 +
  63 + public void setEndPoint(String endPoint) {
  64 + this.endPoint = endPoint;
  65 + }
  66 +
  67 + public String getDate() {
  68 + return date;
  69 + }
  70 +
  71 + public void setDate(String date) {
  72 + this.date = date;
  73 + }
  74 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/service/StepService.java
... ... @@ -147,9 +147,8 @@ public class StepService extends Service implements SensorEventListener {
147 147 //打包周期
148 148 private int packInterval = 10;
149 149 // 轨迹服务ID
150   -// public static final long serviceId = 213511;
151   -//杨帅
152   - public static final long serviceId = 213553;
  150 + public static final long serviceId = 213511;//杨帅
  151 +// public static final long serviceId = 213553;
153 152  
154 153 // 设备标识
155 154 public static String entityName = "";
... ... @@ -161,7 +160,7 @@ public class StepService extends Service implements SensorEventListener {
161 160 /**
162 161 * 轨迹服务
163 162 */
164   - public Trace mTrace = null;
  163 + public static Trace mTrace = null;
165 164  
166 165 public StepService() {
167 166  
... ... @@ -170,7 +169,6 @@ public class StepService extends Service implements SensorEventListener {
170 169  
171 170 @Override
172 171 public void onCreate() {
173   - Log.e("执行onCreate", "onCreate");
174 172 super.onCreate();
175 173 init();
176 174 showStartForegroundNotification();
... ... @@ -325,11 +323,11 @@ public class StepService extends Service implements SensorEventListener {
325 323 }
326 324 //超出范围
327 325 if (alarmPushInfo.getMonitoredAction() == MonitoredAction.exit) {
328   -
  326 + EventBus.getDefault().post(new MessageEvent(Constant.EXIT_RANGE, ""));
329 327 }
330 328 //进入范围
331 329 else if (alarmPushInfo.getMonitoredAction() == MonitoredAction.enter) {
332   -
  330 + EventBus.getDefault().post(new MessageEvent(Constant.ENTER_RANGE, ""));
333 331 }
334 332 Toast.makeText(getApplicationContext(), "onPushCallback:" + alarmPushInfo.getMonitoredAction(), Toast.LENGTH_SHORT).show();
335 333  
... ... @@ -362,12 +360,13 @@ public class StepService extends Service implements SensorEventListener {
362 360 // userId=intent.getExtras().getString("userId");
363 361 userId = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getString("userId", "");
364 362 if (userId != null && !TextUtils.isEmpty(userId)) {
365   - entityName = userId;
366   - initTodayData(userId);
367   - initTrace();
368 363 if (!EventBus.getDefault().isRegistered(this)) {
369 364 EventBus.getDefault().register(this);
370 365 }
  366 + MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).putBoolean("writeUserStep:" + userId, true);
  367 + entityName = userId;
  368 + initTodayData(userId);
  369 + initTrace();
371 370 //显示计步通知
372 371 showStartForegroundNotification();
373 372 new Thread(new Runnable() {
... ... @@ -534,7 +533,7 @@ public class StepService extends Service implements SensorEventListener {
534 533 if (userId == null || CURRENT_DATE == null) {
535 534 return;
536 535 }
537   -// //获取当天的数据,用于展示 CURRENT_DATE
  536 + //获取当天的数据,用于展示 CURRENT_DATE
538 537 List<UserStepEntity> list = DbCore.getDaoSession().getUserStepEntityDao().queryBuilder().where(UserStepEntityDao.Properties.UserId.eq(userId), UserStepEntityDao.Properties.Date.eq(CURRENT_DATE)).list();
539 538 if (list == null) {
540 539 return;
... ... @@ -897,10 +896,10 @@ public class StepService extends Service implements SensorEventListener {
897 896 * 保存记步数据
898 897 */
899 898 private void save() {
900   -// boolean isWriteUserStep = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("writeUserStep:" + userId, false);
901   -// if (!isWriteUserStep) {
902   -// return;
903   -// }
  899 + boolean isWriteUserStep = MySpHelper.getInstance(getApplicationContext(), Context.MODE_MULTI_PROCESS).getBoolean("writeUserStep:" + userId, false);
  900 + if (!isWriteUserStep) {
  901 + return;
  902 + }
904 903 int tempStep = CURRENT_STEP;
905 904 List<UserStepEntity> list = DbCore.getDaoSession().getUserStepEntityDao().queryBuilder().where(UserStepEntityDao.Properties.UserId.eq(userId), UserStepEntityDao.Properties.Date.eq(CURRENT_DATE)).list();
906 905 if (list.size() == 0 || list.isEmpty()) {
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/PedometerMainActivity.java
1 1 package com.cnlive.moudle.pedometer.ui.activity;
2 2  
3 3 import android.Manifest;
  4 +import android.app.Activity;
4 5 import android.content.Context;
5 6 import android.content.Intent;
6 7 import android.content.pm.PackageInfo;
... ... @@ -13,6 +14,7 @@ import android.support.annotation.NonNull;
13 14 import android.support.v4.app.NotificationManagerCompat;
14 15 import android.support.v4.content.ContextCompat;
15 16 import android.util.Log;
  17 +import android.view.KeyEvent;
16 18 import android.widget.Toast;
17 19  
18 20 import com.alibaba.android.arouter.facade.annotation.Route;
... ... @@ -40,6 +42,7 @@ public class PedometerMainActivity extends QMUIFragmentActivity {
40 42 private NotificationManagerCompat notificationManagerCompat;
41 43 private boolean isOpen;
42 44 private PermissionsUtils mPermissionsUtils = new PermissionsUtils();//权限申请
  45 + private RunMainFragment fragment;
43 46  
44 47 @Override
45 48 protected int getContextViewId() {
... ... @@ -149,7 +152,7 @@ public class PedometerMainActivity extends QMUIFragmentActivity {
149 152 }
150 153  
151 154 private void addFragment() {
152   - QMUIFragment fragment = new RunMainFragment();
  155 + fragment = new RunMainFragment();
153 156 getSupportFragmentManager().beginTransaction()
154 157 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
155 158 .addToBackStack(fragment.getClass().getSimpleName())
... ... @@ -236,4 +239,11 @@ public class PedometerMainActivity extends QMUIFragmentActivity {
236 239 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
237 240 mPermissionsUtils.dealResult(requestCode, permissions, grantResults);
238 241 }
  242 +
  243 +
  244 +
  245 + @Override
  246 + public void onBackPressed() {
  247 + return;
  248 + }
239 249 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/RunLineActivity.java
... ... @@ -23,6 +23,7 @@ public class RunLineActivity extends AppCompatActivity {
23 23 setContentView(R.layout.activity_run_line);
24 24  
25 25 getSupportFragmentManager().beginTransaction().replace(R.id.run_line_container, new RunLineFragment()).commit();
  26 +// getSupportFragmentManager().beginTransaction().replace(R.id.run_line_container, new RunningFinishFragment()).commit();
26 27  
27 28 }
28 29 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/RunRaceDetailActivity.java
... ... @@ -16,9 +16,12 @@ import com.cnlive.libs.base.ui.QMUIFragment;
16 16 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
17 17 import com.cnlive.libs.base.util.StatusBarUtil2;
18 18 import com.cnlive.moudle.pedometer.model.RunningMapBean;
  19 +import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
  20 +import com.cnlive.moudle.pedometer.ui.fragment.RunMainFragment;
19 21 import com.cnlive.moudle.pedometer.ui.fragment.RunRaceDetailFragment;
20 22 import com.cnlive.moudle.pedometer.ui.fragment.RunningMapFragment;
21 23 import com.cnlive.moudle.pedometer.ui.widget.FivePersonIconView;
  24 +import com.cnlive.moudle.pedometer.utils.StepUtil;
22 25 import com.example.moudle_pedometer.R;
23 26  
24 27 import java.util.ArrayList;
... ... @@ -41,12 +44,20 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity {
41 44 protected void onCreate(Bundle savedInstanceState) {
42 45 super.onCreate(savedInstanceState);
43 46 StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0);
44   - addFragment();
45   -
  47 + //判断用户是否结束运动
  48 + String uid = "yangshuai";
  49 + UserStepEntity userStepEntity = StepUtil.getUserStepData(getApplicationContext(), uid);
  50 + //没有在数据库中找到相关记录
  51 + if (userStepEntity == null) {
  52 + addFragment(new RunRaceDetailFragment());
  53 + }
  54 + //找到记录
  55 + else {
  56 + addFragment(new RunMainFragment());
  57 + }
46 58 }
47 59  
48   - private void addFragment() {
49   - QMUIFragment fragment = new RunRaceDetailFragment();
  60 + private void addFragment(QMUIFragment fragment) {
50 61 getSupportFragmentManager().beginTransaction()
51 62 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
52 63 .addToBackStack(fragment.getClass().getSimpleName())
... ... @@ -56,7 +67,7 @@ public class RunRaceDetailActivity extends QMUIFragmentActivity {
56 67 @Override
57 68 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
58 69 super.onActivityResult(requestCode, resultCode, data);
59   - if(resultCode == 1002){
  70 + if (resultCode == 1002) {
60 71  
61 72 }
62 73 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/activity/RunningFinishActivity.java
... ... @@ -9,6 +9,7 @@ import com.alibaba.android.arouter.facade.annotation.Route;
9 9 import com.cnlive.libs.base.ui.QMUIFragment;
10 10 import com.cnlive.libs.base.ui.QMUIFragmentActivity;
11 11 import com.cnlive.libs.base.util.StatusBarUtil2;
  12 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
12 13 import com.cnlive.moudle.pedometer.model.RunningMapBean;
13 14 import com.cnlive.moudle.pedometer.ui.fragment.RunRaceDetailFragment;
14 15 import com.cnlive.moudle.pedometer.ui.fragment.RunningFinishFragment;
... ... @@ -31,12 +32,15 @@ public class RunningFinishActivity extends QMUIFragmentActivity {
31 32 protected void onCreate(Bundle savedInstanceState) {
32 33 super.onCreate(savedInstanceState);
33 34 StatusBarUtil2.setColor(this, getResources().getColor(R.color.run_main_bg), 0);
34   - addFragment();
  35 + if (getIntent().getSerializableExtra("runningFinishBean") != null) {
  36 + addFragment((RunningFinishBean) getIntent().getSerializableExtra("runningFinishBean"));
  37 + }
  38 +
35 39  
36 40 }
37 41  
38   - private void addFragment() {
39   - QMUIFragment fragment = new RunningFinishFragment();
  42 + private void addFragment(RunningFinishBean runningFinishBean) {
  43 + QMUIFragment fragment = RunningFinishFragment.instance(runningFinishBean);
40 44 getSupportFragmentManager().beginTransaction()
41 45 .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
42 46 .addToBackStack(fragment.getClass().getSimpleName())
... ... @@ -51,8 +55,9 @@ public class RunningFinishActivity extends QMUIFragmentActivity {
51 55 }
52 56 }
53 57  
54   - public static void startActivity(Activity activity) {
  58 + public static void startActivity(Activity activity, RunningFinishBean runningFinishBean) {
55 59 Intent intent = new Intent(activity, RunningFinishActivity.class);
  60 + intent.putExtra("runningFinishBean", runningFinishBean);
56 61 activity.startActivity(intent);
57 62 }
58 63 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunMainFragment.java
... ... @@ -100,5 +100,4 @@ public class RunMainFragment extends QMUIFragment&lt;RunMainFragmentView, RunMainFr
100 100 }
101 101 }
102 102 }
103   -
104 103 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunRaceDetailFragment.java
... ... @@ -15,8 +15,11 @@ import android.widget.LinearLayout;
15 15 import com.cnlive.libs.base.ui.QMUIFragment;
16 16 import com.cnlive.moudle.pedometer.frame.presenter.RunRaceDetailFragmentPresenter;
17 17 import com.cnlive.moudle.pedometer.frame.view.RunRaceDetailFragmentView;
  18 +import com.cnlive.moudle.pedometer.sql.entity.UserStepEntity;
18 19 import com.cnlive.moudle.pedometer.ui.widget.FivePersonIconView;
  20 +import com.cnlive.moudle.pedometer.utils.ChineseToSpeechUtil;
19 21 import com.cnlive.moudle.pedometer.utils.ScreenUtil;
  22 +import com.cnlive.moudle.pedometer.utils.StepUtil;
20 23 import com.example.moudle_pedometer.R;
21 24 import com.example.moudle_pedometer.databinding.FragmentRunRaceDetailBinding;
22 25 import com.sothree.slidinguppanel.SlidingUpPanelLayout;
... ... @@ -36,6 +39,7 @@ import static android.content.Context.SENSOR_SERVICE;
36 39 public class RunRaceDetailFragment extends QMUIFragment<RunRaceDetailFragmentView, RunRaceDetailFragmentPresenter, FragmentRunRaceDetailBinding> {
37 40 private static final String TAG = "RunRaceDetailFragment";
38 41 private SensorManager mSensorManager;
  42 +
39 43 @Override
40 44 protected int getToolbarId() {
41 45 return 0;
... ... @@ -54,12 +58,14 @@ public class RunRaceDetailFragment extends QMUIFragment&lt;RunRaceDetailFragmentVie
54 58 @Override
55 59 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
56 60 super.onViewCreated(view, savedInstanceState);
57   - mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);//获取传感器管理服务
58 61  
  62 + mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);//获取传感器管理服务
59 63 if (getMvpView() != null) {
60 64 getMvpView().initView();
61 65 }
  66 +
62 67 }
  68 +
63 69 @Override
64 70 public void onResume() {
65 71 super.onResume();
... ... @@ -96,6 +102,7 @@ public class RunRaceDetailFragment extends QMUIFragment&lt;RunRaceDetailFragmentVie
96 102 if (getMvpView() != null) {
97 103 getMvpView().onDestroy();
98 104 }
  105 +
99 106 }
100 107 // private void test() {
101 108 // BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getActivity());
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunningFinishFragment.java
1 1 package com.cnlive.moudle.pedometer.ui.fragment;
2 2  
  3 +import android.os.Bundle;
  4 +import android.support.annotation.Nullable;
  5 +import android.view.View;
  6 +
3 7 import com.cnlive.libs.base.ui.QMUIFragment;
4 8 import com.cnlive.moudle.pedometer.frame.presenter.RunningFinishFragmetPresenter;
5 9 import com.cnlive.moudle.pedometer.frame.view.RunningFinishFragmentView;
  10 +import com.cnlive.moudle.pedometer.model.RunningFinishBean;
6 11 import com.example.moudle_pedometer.R;
7 12 import com.example.moudle_pedometer.databinding.FragmentFinishRunMapBinding;
8 13  
9 14 public class RunningFinishFragment extends QMUIFragment<RunningFinishFragmentView, RunningFinishFragmetPresenter, FragmentFinishRunMapBinding> {
  15 + private RunningFinishBean runningFinishBean;
  16 +
  17 + public static RunningFinishFragment instance(RunningFinishBean runningFinishBean) {
  18 + RunningFinishFragment fragment = new RunningFinishFragment();
  19 + Bundle bundle = null;
  20 + if (runningFinishBean != null) {
  21 + bundle = new Bundle();
  22 + bundle.putSerializable("runningFinishBean", runningFinishBean);
  23 + }
  24 + fragment.setArguments(bundle);
  25 + return fragment;
  26 + }
  27 +
10 28 @Override
11 29 protected int getToolbarId() {
12 30 return 0;
... ... @@ -21,4 +39,17 @@ public class RunningFinishFragment extends QMUIFragment&lt;RunningFinishFragmentVie
21 39 protected int getLayoutId() {
22 40 return R.layout.fragment_finish_run_map;
23 41 }
  42 +
  43 + @Override
  44 + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  45 + super.onViewCreated(view, savedInstanceState);
  46 + if (getArguments() != null) {
  47 + runningFinishBean = (RunningFinishBean) getArguments().getSerializable("runningFinishBean");
  48 + if (runningFinishBean != null) {
  49 + if (getMvpView() != null) {
  50 + getMvpView().initView(runningFinishBean);
  51 + }
  52 + }
  53 + }
  54 + }
24 55 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/ui/fragment/RunningMapFragment.java
1 1 package com.cnlive.moudle.pedometer.ui.fragment;
2 2  
  3 +import android.app.Service;
3 4 import android.content.Context;
4 5 import android.hardware.Sensor;
5 6 import android.hardware.SensorManager;
6 7 import android.os.Bundle;
7 8 import android.os.Handler;
8 9 import android.os.SystemClock;
  10 +import android.os.Vibrator;
9 11 import android.support.annotation.Nullable;
10 12 import android.text.TextUtils;
11 13 import android.util.Log;
... ... @@ -20,6 +22,8 @@ import com.cnlive.moudle.pedometer.model.RunningMapBean;
20 22 import com.cnlive.moudle.pedometer.model.Constant;
21 23 import com.cnlive.moudle.pedometer.model.MessageEvent;
22 24 import com.cnlive.moudle.pedometer.service.StepService;
  25 +import com.cnlive.moudle.pedometer.ui.widget.TipDialog;
  26 +import com.cnlive.moudle.pedometer.utils.ChineseToSpeechUtil;
23 27 import com.cnlive.moudle.pedometer.utils.GsonUtil;
24 28 import com.cnlive.moudle.pedometer.utils.MyMapUtil;
25 29 import com.cnlive.moudle.pedometer.utils.MySpHelper;
... ... @@ -46,6 +50,9 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
46 50 private RunningMapBean runningMapBean;
47 51 private SensorManager mSensorManager;
48 52 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},{\"latitude\":39.933903844942,\"latitudeE6\":3.9933903844942E7,\"longitude\":116.30918357649,\"longitudeE6\":1.1630918357649E8}]";
  53 + //创建震动服务对象
  54 + private Vibrator mVibrator;
  55 + private TipDialog tipDialog;
49 56  
50 57 @Override
51 58 protected int getToolbarId() {
... ... @@ -82,7 +89,12 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
82 89 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
83 90 super.onViewCreated(view, savedInstanceState);
84 91 EventBus.getDefault().register(this);
85   - mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);//获取传感器管理服务
  92 + //获取传感器管理服务
  93 + mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);
  94 + //获取手机震动服务
  95 + mVibrator = (Vibrator) getActivity().getSystemService(Service.VIBRATOR_SERVICE);
  96 + //初始化提示框
  97 + initTipDialog();
86 98 List<LatLng> trackPoints = GsonUtil.jsonToList(test, LatLng.class);
87 99 if (getArguments() != null) {
88 100 runningMapBean = (RunningMapBean) getArguments().getSerializable("runningMapBean");
... ... @@ -113,6 +125,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
113 125 getPresenter().queryHistoryTrace(getActivity(), StepService.entityName, startTime, endTime);
114 126 //查询实时轨迹
115 127 getPresenter().queryRealTimeTrace(getActivity(), StepService.entityName, startTime);
  128 +
116 129 }
117 130  
118 131  
... ... @@ -144,6 +157,8 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
144 157 //取消注册传感器监听
145 158 mSensorManager.unregisterListener(getMvpView());
146 159 }
  160 + ChineseToSpeechUtil.destroy();
  161 +
147 162 }
148 163  
149 164 @Override
... ... @@ -152,6 +167,7 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
152 167 if (getMvpView() != null) {
153 168 getMvpView().onPause();
154 169 }
  170 +
155 171 }
156 172  
157 173 @Override
... ... @@ -179,5 +195,32 @@ public class RunningMapFragment extends QMUIFragment&lt;RunningMapFragmentView, Run
179 195 getMvpView().resetSpeed();
180 196 }
181 197 }
  198 + //超出范围
  199 + else if (messageEvent.getMessageType() == Constant.EXIT_RANGE) {
  200 + ChineseToSpeechUtil.speech(getActivity().getApplicationContext(), "您已偏离预定轨迹!");
  201 + if (mVibrator != null) {
  202 + //设置震动周期,数组表示时间:等待+执行,单位是毫秒,下面操作代表:等待100,执行100,等待100,执行1000,
  203 + //后面的数字如果为-1代表不重复,之执行一次,其他代表会重复,0代表从数组的第0个位置开始
  204 + mVibrator.vibrate(new long[]{100, 1000, 100, 1000}, -1);
  205 + }
  206 + if (tipDialog != null) {
  207 + tipDialog.show();
  208 + }
  209 + }
182 210 }
  211 +
  212 + private void initTipDialog() {
  213 + if (tipDialog == null) {
  214 + tipDialog = new TipDialog(getActivity(), "您已偏离预定轨迹!", "我知道了", R.color.green_round, new TipDialog.DialogInterface() {
  215 + @Override
  216 + public void onClick(TipDialog dialog) {
  217 + dialog.dismiss();
  218 + }
  219 + });
  220 + tipDialog.setCancelable(false);
  221 + tipDialog.setCanceledOnTouchOutside(false);
  222 + }
  223 + }
  224 +
  225 +
183 226 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/ButtonAnimUtil.java
... ... @@ -21,106 +21,132 @@ public class ButtonAnimUtil {
21 21  
22 22 //设置控件放大动画
23 23 public static void setViewZoomIn(View view) {
24   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
25   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1, 1.2f);
26   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1, 1.2f);
27   - animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
28   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
29   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
30   - animatorSetsuofang.start();
  24 + try {
  25 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  26 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1, 1.2f);
  27 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1, 1.2f);
  28 + animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
  29 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  30 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  31 + animatorSetsuofang.start();
  32 + } catch (Exception e) {
  33 + }
31 34 }
32 35  
33 36 //设置控件缩小动画
34 37 public static void setViewZoomOut(View view) {
35   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
36   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1.2f, 1);
37   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1.2f, 1);
38   - animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
39   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
40   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
41   - animatorSetsuofang.start();
  38 + try {
  39 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  40 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1.2f, 1);
  41 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1.2f, 1);
  42 + animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
  43 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  44 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  45 + animatorSetsuofang.start();
  46 + } catch (Exception e) {
  47 + }
42 48 }
43 49  
44 50 //设置控件缩小动画
45 51 public static void setViewDefault(View view) {
46   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
47   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1f, 1);
48   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1f, 1);
49   - animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
50   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
51   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
52   - animatorSetsuofang.start();
  52 + try {
  53 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  54 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1f, 1);
  55 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1f, 1);
  56 + animatorSetsuofang.setDuration(DEFAULT_ZOOM_DURATION);
  57 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  58 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  59 + animatorSetsuofang.start();
  60 + } catch (Exception e) {
  61 + }
53 62 }
54 63  
55 64 //设置控件显示放大动画
56 65 public static void setViewShowZoomIn(View view) {
57   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
58   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0, 1.2f);
59   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0, 1.2f);
60   - animatorSetsuofang.setDuration(SHOW_VIEW_ZOOM_DURATION);
61   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
62   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
63   - animatorSetsuofang.start();
64   - new Handler().postDelayed(new Runnable() {
65   - @Override
66   - public void run() {
67   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
68   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1.2f, 1);
69   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1.2f, 1);
70   - animatorSetsuofang.setDuration(SHOW_VIEW_ZOOM_DURATION);
71   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
72   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
73   - animatorSetsuofang.start();
74   - }
75   - }, SHOW_VIEW_ZOOM_DURATION);
  66 + try {
  67 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  68 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0, 1.2f);
  69 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0, 1.2f);
  70 + animatorSetsuofang.setDuration(SHOW_VIEW_ZOOM_DURATION);
  71 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  72 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  73 + animatorSetsuofang.start();
  74 + new Handler().postDelayed(new Runnable() {
  75 + @Override
  76 + public void run() {
  77 + if (view == null) {
  78 + return;
  79 + }
  80 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  81 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1.2f, 1);
  82 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1.2f, 1);
  83 + animatorSetsuofang.setDuration(SHOW_VIEW_ZOOM_DURATION);
  84 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  85 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  86 + animatorSetsuofang.start();
  87 + }
  88 + }, SHOW_VIEW_ZOOM_DURATION);
  89 + } catch (Exception e) {
  90 + }
76 91 }
77 92  
78 93 //设置控件隐藏缩小动画
79 94 public static void setViewHideZoomOut(View view) {
80   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
81   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1, 0);
82   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1, 0);
83   - animatorSetsuofang.setDuration(HIDE_VIEW_ZOOM_DURATION);
84   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
85   - animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
86   - animatorSetsuofang.start();
  95 + try {
  96 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  97 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 1, 0);
  98 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 1, 0);
  99 + animatorSetsuofang.setDuration(HIDE_VIEW_ZOOM_DURATION);
  100 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  101 + animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始
  102 + animatorSetsuofang.start();
  103 + } catch (Exception e) {
  104 + }
87 105 }
88 106  
89 107 //设置时间显示放大动画
90 108 public static void setTimeShowZoomIn(View view) {
91   - ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0, 1.4f);
92   - ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0, 1.4f);
93   - ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(view, "scaleX", 1.4f, 1);
94   - ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(view, "scaleY", 1.4f, 1);
95   - ObjectAnimator scaleX2 = ObjectAnimator.ofFloat(view, "scaleX", 1, 0);
96   - ObjectAnimator scaleY2 = ObjectAnimator.ofFloat(view, "scaleY", 1, 0);
97   - AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
98   - animatorSetsuofang.setDuration(100);
99   - animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
100   - animatorSetsuofang.play(scaleX).with(scaleY);
101   - animatorSetsuofang.start();
102   - new Handler().postDelayed(new Runnable() {
103   - @Override
104   - public void run() {
105   - AnimatorSet animatorSetsuofang2 = new AnimatorSet();//组合动画
106   - animatorSetsuofang2.setDuration(100);
107   - animatorSetsuofang2.setInterpolator(new DecelerateInterpolator());
108   - animatorSetsuofang2.play(scaleX1).with(scaleY1);
109   - animatorSetsuofang2.start();
110   - }
111   - }, 100);
112   -
113   - new Handler().postDelayed(new Runnable() {
114   - @Override
115   - public void run() {
116   - AnimatorSet animatorSetsuofang3 = new AnimatorSet();//组合动画
117   - animatorSetsuofang3.setDuration(10);
118   - animatorSetsuofang3.setInterpolator(new DecelerateInterpolator());
119   - animatorSetsuofang3.play(scaleX2).with(scaleY2);
120   - animatorSetsuofang3.start();
121   - }
122   - }, 300);
  109 + try {
  110 + ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0, 1.4f);
  111 + ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0, 1.4f);
  112 + ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(view, "scaleX", 1.4f, 1);
  113 + ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(view, "scaleY", 1.4f, 1);
  114 + ObjectAnimator scaleX2 = ObjectAnimator.ofFloat(view, "scaleX", 1, 0);
  115 + ObjectAnimator scaleY2 = ObjectAnimator.ofFloat(view, "scaleY", 1, 0);
  116 + AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画
  117 + animatorSetsuofang.setDuration(100);
  118 + animatorSetsuofang.setInterpolator(new DecelerateInterpolator());
  119 + animatorSetsuofang.play(scaleX).with(scaleY);
  120 + animatorSetsuofang.start();
  121 + new Handler().postDelayed(new Runnable() {
  122 + @Override
  123 + public void run() {
  124 + if (view == null) {
  125 + return;
  126 + }
  127 + AnimatorSet animatorSetsuofang2 = new AnimatorSet();//组合动画
  128 + animatorSetsuofang2.setDuration(100);
  129 + animatorSetsuofang2.setInterpolator(new DecelerateInterpolator());
  130 + animatorSetsuofang2.play(scaleX1).with(scaleY1);
  131 + animatorSetsuofang2.start();
  132 + }
  133 + }, 100);
123 134  
  135 + new Handler().postDelayed(new Runnable() {
  136 + @Override
  137 + public void run() {
  138 + if (view == null) {
  139 + return;
  140 + }
  141 + AnimatorSet animatorSetsuofang3 = new AnimatorSet();//组合动画
  142 + animatorSetsuofang3.setDuration(10);
  143 + animatorSetsuofang3.setInterpolator(new DecelerateInterpolator());
  144 + animatorSetsuofang3.play(scaleX2).with(scaleY2);
  145 + animatorSetsuofang3.start();
  146 + }
  147 + }, 300);
  148 + } catch (Exception e) {
  149 + }
124 150 }
125 151  
126 152  
... ... @@ -131,46 +157,49 @@ public class ButtonAnimUtil {
131 157 * @param closeFlag
132 158 */
133 159 public static void startAnimation(View view, boolean closeFlag) {
134   - //因为CircularReveal动画是api21之后才有的,所以加个判断语句,免得崩溃
135   - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
136   - int cicular_R = view.getHeight() / 2 > view.getWidth() / 2 ? view.getHeight() / 2 : view.getWidth() / 2;
137   - Animator animator = null;
138   - if (!closeFlag) {
139   - animator = ViewAnimationUtils.createCircularReveal(view, (int) view.getWidth() / 2, (int) view.getHeight() / 2, 0, cicular_R);
140   - } else {
141   - animator = ViewAnimationUtils.createCircularReveal(view, (int) view.getWidth() / 2, (int) view.getHeight() / 2, cicular_R, 0);
142   - }
143   - animator.addListener(new Animator.AnimatorListener() {
144   - @Override
145   - public void onAnimationStart(Animator animator) {
146   -
  160 + try {
  161 + //因为CircularReveal动画是api21之后才有的,所以加个判断语句,免得崩溃
  162 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  163 + int cicular_R = view.getHeight() / 2 > view.getWidth() / 2 ? view.getHeight() / 2 : view.getWidth() / 2;
  164 + Animator animator = null;
  165 + if (!closeFlag) {
  166 + animator = ViewAnimationUtils.createCircularReveal(view, (int) view.getWidth() / 2, (int) view.getHeight() / 2, 0, cicular_R);
  167 + } else {
  168 + animator = ViewAnimationUtils.createCircularReveal(view, (int) view.getWidth() / 2, (int) view.getHeight() / 2, cicular_R, 0);
147 169 }
  170 + animator.addListener(new Animator.AnimatorListener() {
  171 + @Override
  172 + public void onAnimationStart(Animator animator) {
148 173  
149   - @Override
150   - public void onAnimationEnd(Animator animator) {
151   - if (closeFlag) {
152   - view.setVisibility(View.GONE);
153 174 }
154   - }
155 175  
156   - @Override
157   - public void onAnimationCancel(Animator animator) {
  176 + @Override
  177 + public void onAnimationEnd(Animator animator) {
  178 + if (closeFlag) {
  179 + view.setVisibility(View.GONE);
  180 + }
  181 + }
158 182  
159   - }
  183 + @Override
  184 + public void onAnimationCancel(Animator animator) {
160 185  
161   - @Override
162   - public void onAnimationRepeat(Animator animator) {
  186 + }
  187 +
  188 + @Override
  189 + public void onAnimationRepeat(Animator animator) {
163 190  
  191 + }
  192 + });
  193 + animator.setDuration(350);
  194 + animator.start();
  195 + } else {
  196 + if (closeFlag) {
  197 + view.setVisibility(View.GONE);
164 198 }
165   - });
166   - animator.setDuration(350);
167   - animator.start();
168   - } else {
169   - if (closeFlag) {
170   - view.setVisibility(View.GONE);
171 199 }
172   - }
173 200  
  201 + } catch (Exception e) {
  202 + }
174 203 }
175 204  
176 205 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/ChineseToSpeechUtil.java 0 → 100644
  1 +package com.cnlive.moudle.pedometer.utils;
  2 +
  3 +import android.app.Application;
  4 +import android.content.Context;
  5 +import android.speech.tts.TextToSpeech;
  6 +
  7 +import java.util.Locale;
  8 +
  9 +public class ChineseToSpeechUtil {
  10 + private static TextToSpeech textToSpeech;
  11 +
  12 +
  13 + public static void speech(Context context, String text) {
  14 + if (textToSpeech == null) {
  15 + textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
  16 + @Override
  17 + public void onInit(int status) {
  18 + if (status == TextToSpeech.SUCCESS) {
  19 + int result = textToSpeech.setLanguage(Locale.CHINA);
  20 + if (result == TextToSpeech.LANG_MISSING_DATA
  21 + || result == TextToSpeech.LANG_NOT_SUPPORTED) {
  22 +// new CoolToast(Application.getContext()).show("不支持朗读功能");
  23 + } else {
  24 + // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
  25 + textToSpeech.setPitch(1.0f);
  26 + // 设置语速
  27 + textToSpeech.setSpeechRate(1f);
  28 + textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
  29 + }
  30 + }
  31 + }
  32 + });
  33 + }else {
  34 + textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
  35 + }
  36 +
  37 +
  38 +
  39 + }
  40 +
  41 + public static void destroy() {
  42 + if (textToSpeech != null) {
  43 + textToSpeech.stop();
  44 + textToSpeech.shutdown();
  45 + textToSpeech=null;
  46 + }
  47 + }
  48 +
  49 +}
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/MyMapUtil.java
... ... @@ -13,7 +13,9 @@ import com.baidu.mapapi.map.PolylineOptions;
13 13 import com.baidu.mapapi.model.LatLng;
14 14 import com.baidu.mapapi.utils.DistanceUtil;
15 15 import com.baidu.trace.model.SortType;
  16 +import com.cnlive.moudle.pedometer.model.RoutePoint;
16 17  
  18 +import java.util.ArrayList;
17 19 import java.util.List;
18 20  
19 21 /**
... ... @@ -35,16 +37,19 @@ public class MyMapUtil {
35 37 */
36 38 public static Overlay drawHistoryTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
37 39 // 绘制新覆盖物前,清空之前的覆盖物
38   - baiduMap.clear();
39 40 if (points == null || points.size() == 0) {
40 41 return null;
41 42 }
42 43 //只有一个点
43 44 if (points.size() == 1) {
44   - Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);
45   - OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
  45 + if (startIconRes != 0) {
  46 + Bitmap pointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);
  47 + OverlayOptions startOptions = new MarkerOptions().position(points.get(0)).icon(BitmapDescriptorFactory.fromBitmap(pointBitmap));
46 48 // .zIndex(9).draggable(true);
47   - return baiduMap.addOverlay(startOptions);
  49 + return baiduMap.addOverlay(startOptions);
  50 + } else {
  51 + return null;
  52 + }
48 53 }
49 54  
50 55 LatLng startPoint;
... ... @@ -58,22 +63,33 @@ public class MyMapUtil {
58 63 }
59 64  
60 65 // 添加起点图标
61   - Bitmap startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);
62   - OverlayOptions startOptions = new MarkerOptions()
63   - .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  66 + Bitmap startPointBitmap = null;
  67 + OverlayOptions startOptions = null;
  68 + if (startIconRes != 0) {
  69 + startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);
  70 + startOptions = new MarkerOptions().perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  71 + .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  72 + }
64 73 // .zIndex(9).draggable(true);
65 74 // 添加终点图标
66   - Bitmap endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 40, 40);
67   - OverlayOptions endOptions = new MarkerOptions().position(endPoint)
68   - .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  75 + Bitmap endPointBitmap = null;
  76 + OverlayOptions endOptions = null;
  77 + if (endIconRes != 0) {
  78 + endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 40, 40);
  79 + endOptions = new MarkerOptions().position(endPoint).perspective(false).animateType(MarkerOptions.MarkerAnimateType.grow)
  80 + .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  81 + }
69 82 // .zIndex(9).draggable(true);
70 83  
71 84 // 添加路线(轨迹)
72 85 OverlayOptions polylineOptions = new PolylineOptions().width(10)
73 86 .color(context.getResources().getColor(lineColor)).points(points);
74   -
75   - baiduMap.addOverlay(startOptions);
76   - baiduMap.addOverlay(endOptions);
  87 + if (startOptions != null) {
  88 + baiduMap.addOverlay(startOptions);
  89 + }
  90 + if (endOptions != null) {
  91 + baiduMap.addOverlay(endOptions);
  92 + }
77 93 return baiduMap.addOverlay(polylineOptions);
78 94 }
79 95  
... ... @@ -82,7 +98,6 @@ public class MyMapUtil {
82 98 */
83 99 public static Overlay drawServerLineTrack(Context context, BaiduMap baiduMap, List<LatLng> points, SortType sortType, int lineColor, int startIconRes, int endIconRes) {
84 100 // 绘制新覆盖物前,清空之前的覆盖物
85   - baiduMap.clear();
86 101 if (points == null || points.size() == 0) {
87 102 return null;
88 103 }
... ... @@ -107,12 +122,19 @@ public class MyMapUtil {
107 122 // 添加起点图标
108 123 Bitmap startPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), startIconRes), 40, 40);
109 124 OverlayOptions startOptions = new MarkerOptions()
110   - .position(startPoint).icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap));
  125 + .position(startPoint)
  126 + .icon(BitmapDescriptorFactory.fromBitmap(startPointBitmap))
  127 + .perspective(false)
  128 + .animateType(MarkerOptions.MarkerAnimateType.grow)
  129 + ;
111 130 // .zIndex(9).draggable(true);
112 131 // 添加终点图标
113 132 Bitmap endPointBitmap = BitmapUtil.getBitmapFromDp(context, BitmapFactory.decodeResource(context.getResources(), endIconRes), 40, 40);
114   - OverlayOptions endOptions = new MarkerOptions().position(endPoint)
115   - .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap));
  133 + OverlayOptions endOptions = new MarkerOptions()
  134 + .position(endPoint)
  135 + .icon(BitmapDescriptorFactory.fromBitmap(endPointBitmap))
  136 + .perspective(false)
  137 + .animateType(MarkerOptions.MarkerAnimateType.grow);
116 138 // .zIndex(9).draggable(true);
117 139  
118 140 // 添加路线(轨迹)
... ... @@ -131,6 +153,18 @@ public class MyMapUtil {
131 153 return baiduMap.addOverlay(polylineOptions);
132 154 }
133 155  
  156 + public static Overlay drawMapLineRoutePoint(Context context, BaiduMap baiduMap, List<RoutePoint> points, int lineColor) {
  157 + List<LatLng> latLngs = new ArrayList<>();
  158 + for (RoutePoint routePoint : points) {
  159 + if (routePoint != null && routePoint.getLat() != 0 && routePoint.getLng() != 0) {
  160 + latLngs.add(new LatLng(routePoint.getLat(), routePoint.getLng()));
  161 + }
  162 + }
  163 + OverlayOptions polylineOptions = new PolylineOptions().width(10)
  164 + .color(context.getResources().getColor(lineColor)).points(latLngs);
  165 + return baiduMap.addOverlay(polylineOptions);
  166 + }
  167 +
134 168 public static double pi = 3.1415926535897932384626;
135 169 public static double a = 6378245.0;
136 170 public static double ee = 0.00669342162296594323;
... ... @@ -257,7 +291,6 @@ public class MyMapUtil {
257 291 }
258 292  
259 293  
260   -
261 294 /*****************************************************地理围栏***************************************************************/
262 295 /**
263 296 * 地球半径
... ... @@ -437,36 +470,38 @@ public class MyMapUtil {
437 470 /**
438 471 * luming
439 472 * 点到边的最短距离
  473 + *
440 474 * @param pointP
441 475 * @param pointA
442 476 * @param pointB
443 477 * @return
444 478 */
445   - public static double minDistanceToLine(LatLng pointP, LatLng pointA, LatLng pointB){
446   - double pa = getDistance(pointP,pointA);
447   - double pb = getDistance(pointP,pointB);
448   - double ab = getDistance(pointA,pointB);
  479 + public static double minDistanceToLine(LatLng pointP, LatLng pointA, LatLng pointB) {
  480 + double pa = getDistance(pointP, pointA);
  481 + double pb = getDistance(pointP, pointB);
  482 + double ab = getDistance(pointA, pointB);
449 483  
450   - if((Math.pow(pa,2) + Math.pow(ab,2)) <= Math.pow(pb,2) ){
  484 + if ((Math.pow(pa, 2) + Math.pow(ab, 2)) <= Math.pow(pb, 2)) {
451 485 return pa;
452 486 }
453   - if((Math.pow(pb,2) + Math.pow(ab,2)) <= Math.pow(pa,2) ){
  487 + if ((Math.pow(pb, 2) + Math.pow(ab, 2)) <= Math.pow(pa, 2)) {
454 488 return pb;
455 489 }
456 490  
457   - double p = (pa + pb + ab) / 2 ;
458   - double s = Math.sqrt(p*(p-pa)*(p-pb)*(p-ab));
  491 + double p = (pa + pb + ab) / 2;
  492 + double s = Math.sqrt(p * (p - pa) * (p - pb) * (p - ab));
459 493  
460   - return (2*s/ab);
  494 + return (2 * s / ab);
461 495 }
462 496  
463 497 /**
464 498 * 通过经纬度获取距离(单位:米)
  499 + *
465 500 * @param location1
466 501 * @param location2
467 502 * @return
468 503 */
469   - public static double getDistance(LatLng location1,LatLng location2) {
  504 + public static double getDistance(LatLng location1, LatLng location2) {
470 505 double lat1 = location1.latitude;
471 506 double lat2 = location2.latitude;
472 507 double lng1 = location1.longitude;
... ... @@ -480,7 +515,67 @@ public class MyMapUtil {
480 515 * Math.pow(Math.sin(b / 2), 2)));
481 516 s = s * EARTH_RADIUS;
482 517 s = Math.round(s * 10000d) / 10000d;
483   - s = s*1000;
  518 + s = s * 1000;
484 519 return s;
485 520 }
  521 +
  522 +
  523 + /**
  524 + * 地图平滑算法
  525 + *
  526 + * @param inPoint
  527 + * @return
  528 + */
  529 + public static List<RoutePoint> optimizePoints(List<RoutePoint> inPoint) {
  530 + int size = inPoint.size();
  531 + List<RoutePoint> outPoint;
  532 +
  533 + int i;
  534 + if (size < 5) {
  535 + return inPoint;
  536 + } else {
  537 + // Latitude
  538 + inPoint.get(0)
  539 + .setLat((3.0 * inPoint.get(0).getLat() + 2.0
  540 + * inPoint.get(1).getLat() + inPoint.get(2).getLat() - inPoint
  541 + .get(4).getLat()) / 5.0);
  542 + inPoint.get(1)
  543 + .setLat((4.0 * inPoint.get(0).getLat() + 3.0
  544 + * inPoint.get(1).getLat() + 2
  545 + * inPoint.get(2).getLat() + inPoint.get(3).getLat()) / 10.0);
  546 +
  547 + inPoint.get(size - 2).setLat(
  548 + (4.0 * inPoint.get(size - 1).getLat() + 3.0
  549 + * inPoint.get(size - 2).getLat() + 2
  550 + * inPoint.get(size - 3).getLat() + inPoint.get(
  551 + size - 4).getLat()) / 10.0);
  552 + inPoint.get(size - 1).setLat(
  553 + (3.0 * inPoint.get(size - 1).getLat() + 2.0
  554 + * inPoint.get(size - 2).getLat()
  555 + + inPoint.get(size - 3).getLat() - inPoint.get(
  556 + size - 5).getLat()) / 5.0);
  557 +
  558 + // Longitude
  559 + inPoint.get(0)
  560 + .setLng((3.0 * inPoint.get(0).getLng() + 2.0
  561 + * inPoint.get(1).getLng() + inPoint.get(2).getLng() - inPoint
  562 + .get(4).getLng()) / 5.0);
  563 + inPoint.get(1)
  564 + .setLng((4.0 * inPoint.get(0).getLng() + 3.0
  565 + * inPoint.get(1).getLng() + 2
  566 + * inPoint.get(2).getLng() + inPoint.get(3).getLng()) / 10.0);
  567 +
  568 + inPoint.get(size - 2).setLng(
  569 + (4.0 * inPoint.get(size - 1).getLng() + 3.0
  570 + * inPoint.get(size - 2).getLng() + 2
  571 + * inPoint.get(size - 3).getLng() + inPoint.get(
  572 + size - 4).getLng()) / 10.0);
  573 + inPoint.get(size - 1).setLng(
  574 + (3.0 * inPoint.get(size - 1).getLng() + 2.0
  575 + * inPoint.get(size - 2).getLng()
  576 + + inPoint.get(size - 3).getLng() - inPoint.get(
  577 + size - 5).getLng()) / 5.0);
  578 + }
  579 + return inPoint;
  580 + }
486 581 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/StepUtil.java
... ... @@ -95,9 +95,8 @@ public class StepUtil {
95 95 if (list != null && list.size() > 0) {
96 96 Log.e(TAG, "clearRunData: " + list.size());
97 97 // for (int i = 0; i < list.size(); i++) {
98   - DbCore.getDaoSession().getUserStepEntityDao().deleteInTx(list);
  98 + DbCore.getDaoSession().getUserStepEntityDao().deleteByKey(list.get(0).getUuid());
99 99 DbCore.getDaoSession().getUserStepEntityDao().detachAll();
100   - DbCore.getDaoSession().clear();
101 100 // }
102 101 }
103 102 }
... ...
moudle_pedometer/src/main/java/com/cnlive/moudle/pedometer/utils/TimeUtil.java
1 1 package com.cnlive.moudle.pedometer.utils;
2 2  
  3 +import java.text.ParseException;
  4 +import java.text.SimpleDateFormat;
  5 +import java.util.Date;
  6 +
  7 +/**
  8 + * @author ShinnyYang
  9 + */
3 10 public class TimeUtil {
4 11 /**
5 12 * 获取当前时间戳(单位:秒)
... ... @@ -10,4 +17,84 @@ public class TimeUtil {
10 17 return System.currentTimeMillis() / 1000;
11 18 }
12 19  
  20 + /**
  21 + * 日期格式字符串转换成时间戳
  22 + *
  23 + * @param dateStr 字符串日期
  24 + * @return
  25 + */
  26 + public static long DateToTimeStamp(String dateStr) {
  27 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  28 + try {
  29 + Date date = simpleDateFormat.parse(dateStr);
  30 + long ts = date.getTime() / 1000;
  31 + return ts;
  32 + } catch (ParseException e) {
  33 + return 0;
  34 + }
  35 + }
  36 +
  37 + /**
  38 + * 取得当前时间戳(精确到秒)
  39 + *
  40 + * @return time(long型的时间)
  41 + */
  42 + public static long getNowTimeStamp() {
  43 + long time = System.currentTimeMillis() / 1000;
  44 + return time;
  45 + }
  46 +
  47 +
  48 + /**
  49 + * 取得当前格式化的时间戳
  50 + *
  51 + * @return 格式化后的日期
  52 + */
  53 + public static String getFormatNowTime() {
  54 + SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm");
  55 + long time = System.currentTimeMillis();
  56 + return df.format(time);
  57 + }
  58 +
  59 + /**
  60 + * 取得指定时间的格式化的时间戳(精确到秒)
  61 + *
  62 + * @return 格式化后的日期
  63 + */
  64 + public static String getFormatTimeStamp(String timeType) {
  65 + SimpleDateFormat df = new SimpleDateFormat(timeType);
  66 + long time = System.currentTimeMillis();
  67 + return df.format(time);
  68 + }
  69 +
  70 + /**
  71 + * 取得指定时间的格式化的时间戳(精确到秒)
  72 + *
  73 + * @return 格式化后的日期
  74 + */
  75 + public static String getStampToTime(long time) {
  76 + String res;
  77 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  78 + long lt = new Long(time * 1000);
  79 + Date date = new Date(lt);
  80 + res = simpleDateFormat.format(date);
  81 + return res;
  82 + }
  83 +
  84 + /**
  85 + * 计算时间差
  86 + *
  87 + * @return
  88 + */
  89 + public static String getWorkTime(long startTime, long workTime) {
  90 + int days = (int) ((workTime - startTime) / (1000 * 60 * 60 * 24));
  91 + int hours = (int) ((workTime - startTime) / (1000 * 60 * 60));
  92 + int minute = (int) ((workTime - startTime) / (1000 * 60));
  93 + return "据上班时间还有:" + hours + "小时," + minute + "分钟";
  94 + }
  95 +
  96 + public static String getCurrentTimeStr(String formate) {
  97 + SimpleDateFormat df = new SimpleDateFormat(formate);
  98 + return df.format(new Date());
  99 + }
13 100 }
... ...
moudle_pedometer/src/main/res/drawable-hdpi/bg_tips_bottom_center.9.png deleted 100644 → 0

2.04 KB

moudle_pedometer/src/main/res/drawable-hdpi/bg_tips_bottom_center.png 0 → 100644

765 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/crown.png 0 → 100644

915 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/icon_back.png 0 → 100644

702 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/icon_end.png 0 → 100644

6.57 KB

moudle_pedometer/src/main/res/drawable-hdpi/icon_end.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/icon_run_route.png

1.47 KB | W: | H:

1.15 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/icon_share.png 0 → 100644

974 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/icon_share.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/icon_start.png 0 → 100644

5.93 KB

moudle_pedometer/src/main/res/drawable-hdpi/icon_start.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/icon_step.png

1.52 KB | W: | H:

1.22 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/more.png

489 Bytes | W: | H:

414 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_home_map.png 0 → 100644

7.73 KB

moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_home_map.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_location_blank.png 0 → 100644

1.7 KB

moudle_pedometer/src/main/res/drawable-hdpi/rt_ic_location_blank.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/rt_training_button_pause.png 0 → 100644

252 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/rt_training_button_pause.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/rt_training_button_resume.png 0 → 100644

443 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/rt_training_button_resume.webp deleted 100644 → 0
No preview for this file type
moudle_pedometer/src/main/res/drawable-hdpi/rt_training_button_stop.png

98 Bytes | W: | H:

114 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-hdpi/sport_people.png 0 → 100644

903 Bytes

moudle_pedometer/src/main/res/drawable-hdpi/sport_speed.png 0 → 100644

1.8 KB

moudle_pedometer/src/main/res/drawable-hdpi/sport_step.png 0 → 100644

2.02 KB

moudle_pedometer/src/main/res/drawable-hdpi/sport_time_cost.png 0 → 100644

1.86 KB

moudle_pedometer/src/main/res/drawable-hdpi/xqt_share.png 0 → 100644

2.84 KB

moudle_pedometer/src/main/res/drawable-hdpi/xqy_return.png 0 → 100644

2.39 KB

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

968 Bytes

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

1.07 KB

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

855 Bytes

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

1.36 KB

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

1.08 KB

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

1.31 KB

moudle_pedometer/src/main/res/drawable-xhdpi/more.png

541 Bytes | W: | H:

459 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-xhdpi/rt_ic_home_map.png 0 → 100644

7.52 KB

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

2.04 KB

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

152 Bytes

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

555 Bytes

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

130 Bytes

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

1.01 KB

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

1.9 KB

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

2.15 KB

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

1.97 KB

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

2.34 KB

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

2.16 KB

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

1.79 KB

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

1.85 KB

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

1.49 KB

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

2.61 KB

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

2.09 KB

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

2.81 KB

moudle_pedometer/src/main/res/drawable-xxhdpi/more.png

953 Bytes | W: | H:

776 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
moudle_pedometer/src/main/res/drawable-xxhdpi/rt_ic_home_map.png 0 → 100644

23.2 KB

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

3.71 KB

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

427 Bytes

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

854 Bytes

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

207 Bytes

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

1.84 KB

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

3.74 KB

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

4.42 KB

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

3.91 KB

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

7.72 KB

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

6.58 KB

moudle_pedometer/src/main/res/drawable/layer_shadow.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <!--边-->
  5 + <item>
  6 + <shape android:shape="rectangle">
  7 + <padding
  8 + android:bottom="7px"
  9 + android:left="7px"
  10 + android:right="7px"
  11 + android:top="5px" />
  12 +
  13 + <solid android:color="#00eeeeee" />
  14 +
  15 + <corners android:radius="5dp" />
  16 + </shape>
  17 + </item>
  18 + <item>
  19 + <shape android:shape="rectangle">
  20 + <padding
  21 + android:bottom="7px"
  22 + android:left="7px"
  23 + android:right="7px"
  24 + android:top="5px" />
  25 +
  26 + <solid android:color="#0Deeeeee" />
  27 +
  28 + <corners android:radius="5dp" />
  29 + </shape>
  30 + </item>
  31 + <item>
  32 + <shape android:shape="rectangle">
  33 + <padding
  34 + android:bottom="7px"
  35 + android:left="7px"
  36 + android:right="7px"
  37 + android:top="5px" />
  38 + <solid android:color="#0Deeeeee" />
  39 + <corners android:radius="5dp" />
  40 + </shape>
  41 + </item>
  42 + <item>
  43 + <shape android:shape="rectangle">
  44 + <padding
  45 + android:bottom="7px"
  46 + android:left="7px"
  47 + android:right="7px"
  48 + android:top="5px" />
  49 + <solid android:color="#0Deeeeee" />
  50 + <corners android:radius="5dp" />
  51 + </shape>
  52 + </item>
  53 + <item>
  54 + <shape android:shape="rectangle">
  55 + <padding
  56 + android:bottom="7px"
  57 + android:left="7px"
  58 + android:right="7px"
  59 + android:top="5px" />
  60 +
  61 + <solid android:color="#0Deeeeee" />
  62 + <corners android:radius="5dp" />
  63 + </shape>
  64 + </item>
  65 +
  66 + <!--中心背景 -->
  67 + <item>
  68 + <shape
  69 + android:shape="rectangle"
  70 + android:useLevel="false">
  71 + <!--实心 -->
  72 + <solid android:color="@color/white" />
  73 + <corners android:radius="5dp" />
  74 + <size
  75 + android:width="32dp"
  76 + android:height="32dp" />
  77 +
  78 + </shape>
  79 + </item>
  80 +
  81 +</layer-list>
0 82 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/drawable/shape_10dp_white_raduis_bg.xml
... ... @@ -2,7 +2,4 @@
2 2 <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 3 <solid android:color="@color/white" />
4 4 <corners android:radius="10dp" />
5   - <stroke
6   - android:width="1dp"
7   - android:color="@color/line" />
8 5 </shape>
9 6 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/drawable/shape_gray_round.xml renamed to moudle_pedometer/src/main/res/drawable/shape_white_round.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2 2 <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 3 <corners android:radius="100dp" />
4   - <solid android:color="@color/gray_round" />
  4 + <solid android:color="@color/white" />
5 5 </shape>
6 6 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/five_persion_icon.xml
... ... @@ -51,5 +51,5 @@
51 51 android:layout_width="9dp"
52 52 android:layout_height="15dp"
53 53 android:layout_marginLeft="5dp"
54   - android:background="@drawable/tc_suit_right_arrow" />
  54 + android:background="@drawable/more" />
55 55 </LinearLayout>
56 56 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/fragment_finish_run_map.xml
... ... @@ -10,7 +10,7 @@
10 10 sothree:umanoDragView="@+id/dragView"
11 11 sothree:umanoFadeColor="@color/black_20"
12 12 sothree:umanoOverlay="true"
13   - sothree:umanoPanelHeight="220dp"
  13 + sothree:umanoPanelHeight="360dp"
14 14 sothree:umanoParallaxOffset="100dp"
15 15 sothree:umanoScrollableView="@+id/scrollView"
16 16 sothree:umanoShadowHeight="0dp">
... ... @@ -26,28 +26,31 @@
26 26 android:layout_height="match_parent"></com.baidu.mapapi.map.MapView>
27 27  
28 28 <FrameLayout
29   - android:layout_width="40dp"
30   - android:layout_height="40dp"
31   - android:layout_margin="10dp"
32   - android:background="@drawable/shape_circle_50_black">
  29 + android:id="@+id/fl_back"
  30 + android:layout_width="55dp"
  31 + android:layout_height="55dp"
  32 + android:background="@drawable/button_fab_white"
  33 + android:focusable="true">
33 34  
34 35 <ImageView
35   - android:layout_width="10dp"
  36 + android:layout_width="12dp"
36 37 android:layout_height="20dp"
37 38 android:layout_gravity="center"
38   - android:background="@drawable/ic_white_back" />
  39 + android:layout_marginLeft="-2dp"
  40 + android:background="@drawable/icon_back"
  41 + android:focusable="false" />
39 42 </FrameLayout>
40 43  
41 44 <FrameLayout
42   - android:layout_width="40dp"
43   - android:layout_height="40dp"
  45 + android:layout_width="55dp"
  46 + android:layout_height="55dp"
44 47 android:layout_gravity="right"
45   - android:layout_margin="10dp"
46   - android:background="@drawable/shape_circle_50_black">
  48 + android:background="@drawable/button_fab_white"
  49 + android:focusable="true">
47 50  
48 51 <ImageView
49   - android:layout_width="15dp"
50   - android:layout_height="15dp"
  52 + android:layout_width="19dp"
  53 + android:layout_height="18dp"
51 54 android:layout_gravity="center"
52 55 android:background="@drawable/icon_share" />
53 56 </FrameLayout>
... ...
moudle_pedometer/src/main/res/layout/fragment_run_main.xml
... ... @@ -51,10 +51,10 @@
51 51 android:layout_width="wrap_content"
52 52 android:layout_height="wrap_content"
53 53 android:layout_marginLeft="10dp"
54   - android:layout_marginTop="15dp"
  54 + android:layout_marginTop="20dp"
55 55 android:text="公里"
56 56 android:textColor="@color/white"
57   - android:textSize="25sp" />
  57 + android:textSize="15sp" />
58 58 </LinearLayout>
59 59 <!--GPS信息-->
60 60 <LinearLayout
... ... @@ -73,10 +73,10 @@
73 73 android:layout_width="wrap_content"
74 74 android:layout_height="wrap_content"
75 75 android:layout_centerVertical="true"
76   - android:layout_marginLeft="15dp"
  76 + android:layout_marginLeft="20dp"
77 77 android:text="GPS"
78 78 android:textColor="@color/white"
79   - android:textSize="20sp"
  79 + android:textSize="18sp"
80 80 android:textStyle="bold" />
81 81  
82 82 <TextView
... ... @@ -88,7 +88,7 @@
88 88 android:layout_toRightOf="@id/tv_gps"
89 89 android:text="(点击查看轨迹)"
90 90 android:textColor="@color/text_gray"
91   - android:textSize="15sp"
  91 + android:textSize="12sp"
92 92 android:textStyle="bold" />
93 93  
94 94 <ImageView
... ... @@ -102,7 +102,7 @@
102 102 <LinearLayout
103 103 android:layout_width="match_parent"
104 104 android:layout_height="wrap_content"
105   - android:layout_marginTop="15dp">
  105 + android:layout_marginTop="35dp">
106 106  
107 107 <LinearLayout
108 108 android:layout_width="0dp"
... ... @@ -112,10 +112,10 @@
112 112 android:orientation="vertical">
113 113  
114 114 <ImageView
115   - android:layout_width="30dp"
116   - android:layout_height="30dp"
  115 + android:layout_width="26dp"
  116 + android:layout_height="23dp"
117 117 android:layout_marginBottom="5dp"
118   - android:src="@drawable/rt_outdoor_video_pace" />
  118 + android:src="@drawable/sport_speed" />
119 119  
120 120 <LinearLayout
121 121 android:layout_width="match_parent"
... ... @@ -138,9 +138,9 @@
138 138 android:layout_height="wrap_content"
139 139 android:layout_marginTop="5dp"
140 140 android:gravity="center"
141   - android:text="速"
  141 + android:text="速"
142 142 android:textColor="@color/text_gray"
143   - android:textSize="17sp"
  143 + android:textSize="15sp"
144 144 android:textStyle="bold" />
145 145 </LinearLayout>
146 146 <!--用时-->
... ... @@ -152,10 +152,10 @@
152 152 android:orientation="vertical">
153 153  
154 154 <ImageView
155   - android:layout_width="30dp"
156   - android:layout_height="30dp"
  155 + android:layout_width="23dp"
  156 + android:layout_height="25dp"
157 157 android:layout_marginBottom="5dp"
158   - android:src="@drawable/rt_outdoor_video_time" />
  158 + android:src="@drawable/sport_time_cost" />
159 159  
160 160 <Chronometer
161 161 android:id="@+id/chronometer"
... ... @@ -173,7 +173,7 @@
173 173 android:gravity="center"
174 174 android:text="用时"
175 175 android:textColor="@color/text_gray"
176   - android:textSize="17sp"
  176 + android:textSize="15sp"
177 177 android:textStyle="bold" />
178 178 </LinearLayout>
179 179 <!--热量-->
... ... @@ -185,10 +185,10 @@
185 185 android:orientation="vertical">
186 186  
187 187 <ImageView
188   - android:layout_width="30dp"
189   - android:layout_height="30dp"
  188 + android:layout_width="26dp"
  189 + android:layout_height="24dp"
190 190 android:layout_marginBottom="5dp"
191   - android:src="@drawable/rt_outdoor_video_cal" />
  191 + android:src="@drawable/sport_step" />
192 192  
193 193 <TextView
194 194 android:id="@+id/tv_step_count"
... ... @@ -205,9 +205,9 @@
205 205 android:layout_height="wrap_content"
206 206 android:layout_marginTop="5dp"
207 207 android:gravity="center"
208   - android:text="步"
  208 + android:text="步"
209 209 android:textColor="@color/text_gray"
210   - android:textSize="17sp"
  210 + android:textSize="15sp"
211 211 android:textStyle="bold" />
212 212 </LinearLayout>
213 213 </LinearLayout>
... ... @@ -248,26 +248,22 @@
248 248  
249 249 <FrameLayout
250 250 android:layout_width="match_parent"
251   - android:layout_height="wrap_content">
252   -
  251 + android:layout_height="wrap_content"
  252 + android:layout_marginTop="5dp"
  253 + android:visibility="invisible">
253 254  
254 255 <ImageView
255   - android:layout_width="70dp"
256   - android:layout_height="50dp"
257   - android:layout_gravity="center"
258   - android:layout_marginTop="-5dp"
259   - android:layout_marginBottom="-10dp"
260   - android:padding="0dp"
261   - android:scaleX="1.1"
262   - android:scaleY="0.8" />
  256 + android:layout_width="72dp"
  257 + android:layout_height="33dp"
  258 + android:layout_gravity="center" />
263 259  
264 260 <TextView
265 261 android:layout_width="wrap_content"
266 262 android:layout_height="wrap_content"
267 263 android:layout_gravity="center"
  264 + android:layout_marginBottom="5dp"
268 265 android:gravity="center"
269 266 android:src="@drawable/bg_tips_bottom_center"
270   - android:text=""
271 267 android:textSize="12sp" />
272 268 </FrameLayout>
273 269  
... ... @@ -280,8 +276,8 @@
280 276 android:focusable="true">
281 277  
282 278 <ImageView
283   - android:layout_width="35dp"
284   - android:layout_height="35dp"
  279 + android:layout_width="17dp"
  280 + android:layout_height="20dp"
285 281 android:layout_gravity="center"
286 282 android:layout_marginBottom="10dp"
287 283 android:background="@drawable/rt_training_button_resume"
... ... @@ -308,23 +304,20 @@
308 304 android:id="@+id/fl_stop_tip"
309 305 android:layout_width="match_parent"
310 306 android:layout_height="wrap_content"
  307 + android:layout_marginTop="5dp"
311 308 android:visibility="invisible">
312 309  
313 310 <ImageView
314   - android:layout_width="70dp"
315   - android:layout_height="50dp"
  311 + android:layout_width="72dp"
  312 + android:layout_height="33dp"
316 313 android:layout_gravity="center"
317   - android:layout_marginTop="-5dp"
318   - android:layout_marginBottom="-10dp"
319   - android:background="@drawable/bg_tips_bottom_center"
320   - android:padding="0dp"
321   - android:scaleX="1.1"
322   - android:scaleY="0.8" />
  314 + android:background="@drawable/bg_tips_bottom_center" />
323 315  
324 316 <TextView
325 317 android:layout_width="wrap_content"
326 318 android:layout_height="wrap_content"
327 319 android:layout_gravity="center"
  320 + android:layout_marginBottom="3dp"
328 321 android:gravity="center"
329 322 android:src="@drawable/bg_tips_bottom_center"
330 323 android:text="长按结束"
... ... @@ -346,8 +339,8 @@
346 339 android:visibility="gone" />
347 340  
348 341 <ImageView
349   - android:layout_width="35dp"
350   - android:layout_height="35dp"
  342 + android:layout_width="17dp"
  343 + android:layout_height="17dp"
351 344 android:layout_gravity="center"
352 345 android:layout_marginBottom="10dp"
353 346 android:background="@drawable/rt_training_button_stop"
... ... @@ -377,12 +370,12 @@
377 370 android:layout_width="85dp"
378 371 android:layout_height="85dp"
379 372 android:layout_marginBottom="12dp"
380   - android:background="@drawable/shape_gray_round"
  373 + android:background="@drawable/shape_white_round"
381 374 android:focusable="true">
382 375  
383 376 <ImageView
384   - android:layout_width="35dp"
385   - android:layout_height="35dp"
  377 + android:layout_width="15dp"
  378 + android:layout_height="18dp"
386 379 android:layout_gravity="center"
387 380 android:layout_marginBottom="10dp"
388 381 android:background="@drawable/rt_training_button_pause"
... ... @@ -408,7 +401,8 @@
408 401 android:layout_width="match_parent"
409 402 android:layout_height="match_parent"
410 403 android:background="@color/run_main_time_bg"
411   - android:gravity="center">
  404 + android:gravity="center"
  405 + android:visibility="visible">
412 406  
413 407 <TextView
414 408 android:id="@+id/tv_time_count_down"
... ...
moudle_pedometer/src/main/res/layout/fragment_run_race_detail.xml
... ... @@ -10,7 +10,7 @@
10 10 sothree:umanoDragView="@+id/dragView"
11 11 sothree:umanoFadeColor="@color/black_20"
12 12 sothree:umanoOverlay="true"
13   - sothree:umanoPanelHeight="142dp"
  13 + sothree:umanoPanelHeight="141dp"
14 14 sothree:umanoParallaxOffset="250dp"
15 15 sothree:umanoScrollableView="@+id/scrollView"
16 16 sothree:umanoShadowHeight="0dp">
... ... @@ -25,32 +25,22 @@
25 25 android:layout_width="match_parent"
26 26 android:layout_height="match_parent"></com.baidu.mapapi.map.MapView>
27 27  
28   - <FrameLayout
29   - android:layout_width="40dp"
30   - android:layout_height="40dp"
  28 +
  29 + <ImageView
  30 + android:id="@+id/iv_back"
  31 + android:layout_width="35dp"
  32 + android:layout_height="35dp"
31 33 android:layout_margin="10dp"
32   - android:background="@drawable/shape_circle_50_black">
33   -
34   - <ImageView
35   - android:layout_width="10dp"
36   - android:layout_height="20dp"
37   - android:layout_gravity="center"
38   - android:background="@drawable/ic_white_back" />
39   - </FrameLayout>
40   -
41   - <FrameLayout
42   - android:layout_width="40dp"
43   - android:layout_height="40dp"
  34 + android:background="@drawable/xqy_return" />
  35 +
  36 +
  37 + <ImageView
  38 + android:id="@+id/iv_share"
  39 + android:layout_width="35dp"
  40 + android:layout_height="35dp"
44 41 android:layout_gravity="right"
45 42 android:layout_margin="10dp"
46   - android:background="@drawable/shape_circle_50_black">
47   -
48   - <ImageView
49   - android:layout_width="15dp"
50   - android:layout_height="15dp"
51   - android:layout_gravity="center"
52   - android:background="@drawable/icon_share" />
53   - </FrameLayout>
  43 + android:background="@drawable/xqt_share" />
54 44 <!---->
55 45  
56 46  
... ... @@ -89,6 +79,11 @@
89 79 android:id="@+id/include_rank"
90 80 layout="@layout/layout_run_detail_rank"
91 81 android:visibility="visible" />
  82 + <!---->
  83 + <View
  84 + android:layout_width="match_parent"
  85 + android:layout_height="20dp"
  86 + android:background="#F4F4F4" />
92 87 <!--路线介绍-->
93 88 <include
94 89 android:id="@+id/include_street_introduce"
... ...
moudle_pedometer/src/main/res/layout/fragment_running_map.xml
... ... @@ -13,17 +13,17 @@
13 13  
14 14 <FrameLayout
15 15 android:id="@+id/fl_back"
16   - android:layout_width="60dp"
17   - android:layout_height="60dp"
  16 + android:layout_width="55dp"
  17 + android:layout_height="55dp"
18 18 android:background="@drawable/button_fab_white"
19 19 android:focusable="true">
20 20  
21 21 <ImageView
22   - android:layout_width="25dp"
23   - android:layout_height="25dp"
  22 + android:layout_width="12dp"
  23 + android:layout_height="20dp"
24 24 android:layout_gravity="center"
25   - android:layout_marginLeft="2dp"
26   - android:background="@drawable/mo_ic_dialog_back"
  25 + android:layout_marginLeft="-2dp"
  26 + android:background="@drawable/icon_back"
27 27 android:focusable="false" />
28 28 </FrameLayout>
29 29  
... ... @@ -35,15 +35,15 @@
35 35  
36 36 <FrameLayout
37 37 android:id="@+id/fl_location"
38   - android:layout_width="60dp"
39   - android:layout_height="60dp"
  38 + android:layout_width="55dp"
  39 + android:layout_height="55dp"
40 40 android:layout_marginBottom="20dp"
41 41 android:background="@drawable/button_fab_white"
42 42 android:focusable="true">
43 43  
44 44 <ImageView
45   - android:layout_width="60dp"
46   - android:layout_height="60dp"
  45 + android:layout_width="20dp"
  46 + android:layout_height="20dp"
47 47 android:layout_gravity="center"
48 48 android:background="@drawable/rt_ic_location_blank"
49 49 android:focusable="false" />
... ...
moudle_pedometer/src/main/res/layout/layout_finish_running_route.xml
1 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="match_parent"
5   - android:layout_margin="10dp"
6   - android:background="@drawable/shape_10dp_white_raduis_bg"
7   - android:orientation="vertical">
8   - <!--跑步路线-->
9   - <LinearLayout
10   - android:layout_width="match_parent"
11   - android:layout_height="wrap_content"
12   - android:layout_marginTop="10dp"
13   - android:gravity="bottom">
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
14 3  
15   - <ImageView
16   - android:layout_width="30dp"
17   - android:layout_height="30dp"
18   - android:layout_marginLeft="10dp"
19   - android:background="@drawable/icon_run_route" />
20   -
21   - <TextView
22   - android:layout_width="wrap_content"
23   - android:layout_height="wrap_content"
24   - android:layout_marginBottom="1dp"
25   - android:text="跑步路线"
26   - android:textColor="@color/black"
27   - android:textSize="12sp" />
28   - </LinearLayout>
29   - <!--起点-->
30 4 <LinearLayout
31 5 android:layout_width="match_parent"
32 6 android:layout_height="wrap_content"
33   - android:layout_marginTop="10dp"
34   - android:gravity="center_vertical">
35   -
36   - <View
37   - android:layout_width="10dp"
38   - android:layout_height="10dp"
39   - android:layout_marginLeft="15dp"
40   - android:background="@drawable/shape_circle_green" />
41   -
42   - <TextView
43   - android:layout_width="wrap_content"
44   - android:layout_height="wrap_content"
45   - android:layout_marginLeft="10dp"
46   - android:text="@string/layout_street_start_point"
47   - android:textColor="@color/text_gray"
48   - android:textSize="14sp" />
49   -
50   - <TextView
51   - android:layout_width="wrap_content"
  7 + android:layout_margin="10dp"
  8 + android:background="@drawable/shape_10dp_white_raduis_bg"
  9 + android:orientation="vertical">
  10 + <!--跑步路线-->
  11 + <LinearLayout
  12 + android:layout_width="match_parent"
52 13 android:layout_height="wrap_content"
53   - android:layout_marginLeft="10dp"
54   - android:text="首都师范大学操场东门"
55   - android:textColor="@color/black"
56   - android:textSize="15sp" />
57   - </LinearLayout>
58   - <!--竖线-->
59   - <View
60   - android:layout_width="1dp"
61   - android:layout_height="30dp"
62   - android:layout_marginLeft="19dp"
63   - android:layout_marginTop="-3dp"
64   - android:background="@color/vertical_line" />
65   - <!--终点-->
66   - <LinearLayout
67   - android:layout_width="match_parent"
68   - android:layout_height="wrap_content"
69   - android:layout_marginTop="-3dp"
70   - android:gravity="center_vertical">
  14 + android:layout_marginTop="10dp"
  15 + android:gravity="bottom">
71 16  
72   - <View
73   - android:layout_width="10dp"
74   - android:layout_height="10dp"
75   - android:layout_marginLeft="15dp"
76   - android:background="@drawable/shape_circle_red" />
  17 + <ImageView
  18 + android:layout_width="18dp"
  19 + android:layout_height="18dp"
  20 + android:layout_marginLeft="10dp"
  21 + android:background="@drawable/icon_run_route" />
77 22  
78   - <TextView
79   - android:layout_width="wrap_content"
  23 + <TextView
  24 + android:layout_width="wrap_content"
  25 + android:layout_height="match_parent"
  26 + android:layout_marginLeft="5dp"
  27 + android:layout_marginBottom="1dp"
  28 + android:gravity="bottom"
  29 + android:text="跑步路线"
  30 + android:textColor="@color/text_black"
  31 + android:textSize="12sp" />
  32 + </LinearLayout>
  33 + <!--起点-->
  34 + <LinearLayout
  35 + android:layout_width="match_parent"
80 36 android:layout_height="wrap_content"
81   - android:layout_marginLeft="10dp"
82   - android:text="@string/layout_street_end_point"
83   - android:textColor="@color/text_gray"
84   - android:textSize="14sp" />
  37 + android:layout_marginTop="10dp"
  38 + android:gravity="center_vertical">
85 39  
86   - <TextView
87   - android:layout_width="wrap_content"
88   - android:layout_height="wrap_content"
89   - android:layout_marginLeft="10dp"
90   - android:text="首都师范大学操场东门"
91   - android:textColor="@color/black"
92   - android:textSize="15sp" />
93   - </LinearLayout>
94   - <!--竖线-->
95   - <View
96   - android:layout_width="1dp"
97   - android:layout_height="30dp"
98   - android:layout_marginLeft="19dp"
99   - android:layout_marginTop="-3dp"
100   - android:background="@color/vertical_line" />
101   - <!--时间-->
102   - <LinearLayout
103   - android:layout_width="match_parent"
104   - android:layout_height="wrap_content"
105   - android:layout_marginTop="-17dp"
106   - android:gravity="center_vertical">
  40 + <View
  41 + android:layout_width="6dp"
  42 + android:layout_height="6dp"
  43 + android:layout_marginLeft="15dp"
  44 + android:background="@drawable/shape_circle_green" />
107 45  
108   - <View
109   - android:layout_width="7dp"
110   - android:layout_height="7dp"
111   - android:layout_marginLeft="16dp"
112   - android:background="@drawable/shape_circle_gray" />
  46 + <TextView
  47 + android:layout_width="wrap_content"
  48 + android:layout_height="wrap_content"
  49 + android:layout_marginLeft="10dp"
  50 + android:text="@string/layout_street_start_point"
  51 + android:textColor="@color/text_gray"
  52 + android:textSize="12sp" />
113 53  
  54 + <TextView
  55 + android:id="@+id/tv_start_point"
  56 + android:layout_width="wrap_content"
  57 + android:layout_height="wrap_content"
  58 + android:layout_marginLeft="10dp"
  59 + android:text="首都师范大学操场东门"
  60 + android:textColor="@color/black"
  61 + android:textSize="12sp" />
  62 + </LinearLayout>
  63 + <!--竖线-->
  64 + <View
  65 + android:layout_width="1dp"
  66 + android:layout_height="18dp"
  67 + android:layout_marginLeft="17dp"
  68 + android:layout_marginTop="-3dp"
  69 + android:background="@color/vertical_line" />
  70 + <!--终点-->
114 71 <LinearLayout
115 72 android:layout_width="match_parent"
116 73 android:layout_height="wrap_content"
117   - android:orientation="vertical">
  74 + android:layout_marginTop="-3dp"
  75 + android:gravity="center_vertical">
  76 +
  77 + <View
  78 + android:layout_width="6dp"
  79 + android:layout_height="6dp"
  80 + android:layout_marginLeft="15dp"
  81 + android:background="@drawable/shape_circle_red" />
118 82  
119 83 <TextView
120 84 android:layout_width="wrap_content"
121 85 android:layout_height="wrap_content"
122 86 android:layout_marginLeft="10dp"
123   - android:text="00:27:23"
124   - android:textColor="@color/black"
125   - android:textSize="18sp"
126   - android:textStyle="bold" />
  87 + android:text="@string/layout_street_end_point"
  88 + android:textColor="@color/text_gray"
  89 + android:textSize="12sp" />
127 90  
128 91 <TextView
  92 + android:id="@+id/tv_end_point"
129 93 android:layout_width="wrap_content"
130 94 android:layout_height="wrap_content"
131 95 android:layout_marginLeft="10dp"
132   - android:text="跑步记录时长"
133   - android:textColor="@color/text_gray"
  96 + android:text="首都师范大学操场东门"
  97 + android:textColor="@color/black"
134 98 android:textSize="12sp" />
135   - <!---->
136 99 </LinearLayout>
137   - </LinearLayout>
138   - <!--竖线-->
139   - <View
140   - android:layout_width="1dp"
141   - android:layout_height="30dp"
142   - android:layout_marginLeft="19dp"
143   - android:layout_marginTop="-15dp"
144   - android:background="@color/vertical_line" />
145   - <!---->
146   - <LinearLayout
147   - android:layout_width="match_parent"
148   - android:layout_height="wrap_content"
149   - android:layout_marginTop="-5dp"
150   - android:layout_marginBottom="10dp"
151   - android:gravity="center_vertical">
152   -
  100 + <!--竖线-->
153 101 <View
154   - android:layout_width="7dp"
155   - android:layout_height="7dp"
156   - android:layout_marginLeft="16dp"
157   - android:background="@drawable/shape_circle_gray" />
  102 + android:layout_width="1dp"
  103 + android:layout_height="25dp"
  104 + android:layout_marginLeft="17dp"
  105 + android:layout_marginTop="-3dp"
  106 + android:background="@color/vertical_line" />
  107 + <!--时间-->
  108 + <LinearLayout
  109 + android:layout_width="match_parent"
  110 + android:layout_height="wrap_content"
  111 + android:layout_marginTop="-15dp"
  112 + android:gravity="center_vertical">
  113 +
  114 + <View
  115 + android:layout_width="4dp"
  116 + android:layout_height="4dp"
  117 + android:layout_marginLeft="16dp"
  118 + android:background="@drawable/shape_circle_gray" />
  119 +
  120 + <LinearLayout
  121 + android:layout_width="match_parent"
  122 + android:layout_height="wrap_content"
  123 + android:orientation="vertical">
158 124  
159   - <TextView
160   - android:layout_width="wrap_content"
  125 + <TextView
  126 + android:id="@+id/tv_timer"
  127 + android:layout_width="wrap_content"
  128 + android:layout_height="wrap_content"
  129 + android:layout_marginLeft="10dp"
  130 + android:layout_marginTop="5dp"
  131 + android:text="00:27:23"
  132 + android:textColor="@color/text_black"
  133 + android:textSize="18sp"
  134 + android:textStyle="bold" />
  135 +
  136 + <TextView
  137 + android:layout_width="wrap_content"
  138 + android:layout_height="wrap_content"
  139 + android:layout_marginLeft="11dp"
  140 + android:text="跑步记录时长"
  141 + android:textColor="@color/text_gray"
  142 + android:textSize="11sp" />
  143 + <!---->
  144 + </LinearLayout>
  145 + </LinearLayout>
  146 + <!--竖线-->
  147 + <View
  148 + android:layout_width="1dp"
  149 + android:layout_height="25dp"
  150 + android:layout_marginLeft="17dp"
  151 + android:layout_marginTop="-15dp"
  152 + android:background="@color/vertical_line" />
  153 + <!---->
  154 + <LinearLayout
  155 + android:layout_width="match_parent"
161 156 android:layout_height="wrap_content"
162   - android:layout_marginLeft="10dp"
163   - android:text="路线完成"
164   - android:textColor="@color/black"
165   - android:textSize="15sp"
166   - android:textStyle="bold" />
  157 + android:layout_marginTop="-5dp"
  158 + android:layout_marginBottom="10dp"
  159 + android:gravity="center_vertical"
  160 + android:paddingTop="5dp">
  161 +
  162 + <View
  163 + android:layout_width="4dp"
  164 + android:layout_height="4dp"
  165 + android:layout_marginLeft="16dp"
  166 + android:background="@drawable/shape_circle_gray" />
  167 +
  168 + <TextView
  169 + android:layout_width="wrap_content"
  170 + android:layout_height="wrap_content"
  171 + android:layout_marginLeft="10dp"
  172 + android:text="路线完成"
  173 + android:textColor="@color/text_gray"
  174 + android:textSize="11sp" />
  175 + </LinearLayout>
  176 + <!---->
167 177 </LinearLayout>
168   - <!---->
169   -</LinearLayout>
170 178 \ No newline at end of file
  179 +</layout>
171 180 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/layout_finish_step.xml
1 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="80dp"
5   - android:layout_margin="10dp"
6   - android:background="@drawable/shape_10dp_white_raduis_bg"
7   - android:orientation="vertical">
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
8 3  
9 4 <LinearLayout
10   - android:layout_width="wrap_content"
11   - android:layout_height="wrap_content"
12   - android:layout_marginLeft="10dp"
13   - android:layout_marginTop="10dp"
14   - android:gravity="bottom">
15   -
16   - <ImageView
17   - android:layout_width="25dp"
18   - android:layout_height="25dp"
19   - android:background="@drawable/icon_step" />
  5 + android:layout_width="match_parent"
  6 + android:layout_height="80dp"
  7 + android:layout_margin="10dp"
  8 + android:background="@drawable/shape_10dp_white_raduis_bg"
  9 + android:orientation="vertical">
20 10  
21   - <TextView
  11 + <LinearLayout
22 12 android:layout_width="wrap_content"
23 13 android:layout_height="wrap_content"
24 14 android:layout_marginLeft="10dp"
25   - android:text="总步数" />
26   - </LinearLayout>
27   - <!---->
28   - <LinearLayout
29   - android:layout_width="match_parent"
30   - android:layout_height="match_parent"
31   - android:paddingBottom="10dp"
32   - android:gravity="center">
  15 + android:layout_marginTop="10dp"
  16 + android:gravity="bottom">
33 17  
34   - <TextView
35   - android:layout_width="wrap_content"
36   - android:layout_height="wrap_content"
37   - android:text="1233"
38   - android:textColor="@color/green_round"
39   - android:textSize="25sp"
40   - android:textStyle="bold" />
  18 + <ImageView
  19 + android:layout_width="16dp"
  20 + android:layout_height="18dp"
  21 + android:background="@drawable/icon_step" />
41 22  
42   - <TextView
43   - android:layout_width="wrap_content"
44   - android:layout_height="wrap_content"
45   - android:layout_marginLeft="10dp"
46   - android:layout_marginTop="4dp"
47   - android:text="步"
48   - android:textColor="@color/black"
49   - android:textSize="12sp"
50   - android:textStyle="bold" />
  23 + <TextView
  24 + android:layout_width="wrap_content"
  25 + android:layout_height="wrap_content"
  26 + android:layout_marginLeft="10dp"
  27 + android:text="总步数"
  28 + android:textSize="12sp" />
  29 + </LinearLayout>
  30 + <!---->
  31 + <LinearLayout
  32 + android:layout_width="match_parent"
  33 + android:layout_height="match_parent"
  34 + android:gravity="center"
  35 + android:paddingBottom="10dp">
  36 +
  37 + <TextView
  38 + android:id="@+id/tv_step"
  39 + android:layout_width="wrap_content"
  40 + android:layout_height="wrap_content"
  41 + android:text="1233"
  42 + android:textColor="@color/green_round"
  43 + android:textSize="28sp"
  44 + android:textStyle="bold" />
  45 +
  46 + <TextView
  47 + android:layout_width="wrap_content"
  48 + android:layout_height="wrap_content"
  49 + android:layout_marginLeft="10dp"
  50 + android:layout_marginTop="4dp"
  51 + android:text="步"
  52 + android:textColor="@color/text_black"
  53 + android:textSize="12sp" />
  54 + </LinearLayout>
  55 + <!---->
51 56 </LinearLayout>
52   - <!---->
53   -</LinearLayout>
54 57 \ No newline at end of file
  58 +</layout>
55 59 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/layout_finish_user_info.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2   -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
3   - xmlns:app="http://schemas.android.com/apk/res-auto"
4   - android:layout_width="match_parent"
5   - android:layout_height="match_parent"
6   - android:layout_margin="10dp">
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
7 3  
8   - <LinearLayout
  4 + <FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
9 5 android:layout_width="match_parent"
10   - android:layout_height="170dp"
11   - android:layout_marginTop="30dp"
12   - android:background="@drawable/shape_10dp_white_raduis_bg"
13   - android:orientation="vertical">
  6 + android:layout_height="match_parent"
  7 + android:layout_margin="10dp">
14 8  
15   - <TextView
16   - android:layout_width="wrap_content"
17   - android:layout_height="wrap_content"
18   - android:layout_marginLeft="80dp"
19   - android:layout_marginTop="10dp"
20   - android:text="用户昵称"
21   - android:textColor="@color/black"
22   - android:textSize="15sp" />
23   - <!---->
24 9 <LinearLayout
25 10 android:layout_width="match_parent"
26   - android:layout_height="wrap_content"
27   - android:gravity="center_vertical">
  11 + android:layout_height="170dp"
  12 + android:layout_marginTop="30dp"
  13 + android:background="@drawable/shape_10dp_white_raduis_bg"
  14 + android:orientation="vertical">
28 15  
29   - <LinearLayout
30   - android:layout_width="0dp"
  16 + <TextView
  17 + android:id="@+id/tv_user_nickName"
  18 + android:layout_width="wrap_content"
31 19 android:layout_height="wrap_content"
32   - android:layout_weight="1"
33   - android:orientation="vertical">
34   -
35   - <TextView
36   - android:layout_width="wrap_content"
37   - android:layout_height="wrap_content"
38   - android:layout_marginLeft="15dp"
39   - android:layout_marginTop="15dp"
40   - android:text="奥森公园南路"
41   - android:textColor="@color/black"
42   - android:textSize="15sp" />
43   -
44   - <TextView
45   - android:layout_width="wrap_content"
46   - android:layout_height="wrap_content"
47   - android:layout_marginLeft="15dp"
48   - android:layout_marginTop="5dp"
49   - android:text="2019/06/10 9:51"
50   - android:textColor="@color/text_gray" />
51   - </LinearLayout>
  20 + android:layout_marginLeft="80dp"
  21 + android:layout_marginTop="10dp"
  22 + android:text="用户昵称"
  23 + android:textColor="@color/text_black"
  24 + android:textSize="13sp" />
52 25 <!---->
53 26 <LinearLayout
54   - android:layout_width="0dp"
  27 + android:layout_width="match_parent"
55 28 android:layout_height="wrap_content"
56   - android:layout_weight="1"
57   - android:gravity="right|bottom">
  29 + android:gravity="center_vertical">
58 30  
59   - <TextView
60   - android:layout_width="wrap_content"
  31 + <LinearLayout
  32 + android:layout_width="0dp"
61 33 android:layout_height="wrap_content"
62   - android:layout_marginRight="10dp"
63   - android:text="1.53"
64   - android:textColor="@color/black"
65   - android:textSize="35sp"
66   - android:textStyle="bold" />
  34 + android:layout_weight="1"
  35 + android:orientation="vertical">
67 36  
68   - <TextView
69   - android:layout_width="wrap_content"
70   - android:layout_height="wrap_content"
71   - android:layout_marginRight="15dp"
72   - android:text="公里"
73   - android:textColor="@color/black"
74   - android:textSize="15sp" />
75   - </LinearLayout>
76   - <!---->
77   - </LinearLayout>
78   - <!--横线-->
79   - <View
80   - android:layout_width="match_parent"
81   - android:layout_height="1dp"
82   - android:layout_marginTop="10dp"
83   - android:background="@color/line" />
84   - <!--配速和用时-->
85   - <LinearLayout
86   - android:layout_width="match_parent"
87   - android:layout_height="wrap_content"
88   - android:layout_marginTop="10sp">
89   - <!---->
90   - <LinearLayout
91   - android:layout_width="0dp"
92   - android:layout_height="wrap_content"
93   - android:layout_weight="1"
94   - android:gravity="center"
95   - android:orientation="vertical">
  37 + <TextView
  38 + android:id="@+id/tv_street_name"
  39 + android:layout_width="wrap_content"
  40 + android:layout_height="wrap_content"
  41 + android:layout_marginLeft="15dp"
  42 + android:layout_marginTop="15dp"
  43 + android:text="奥森公园南路"
  44 + android:textColor="@color/text_black"
  45 + android:textSize="15sp" />
96 46  
97   - <TextView
98   - android:layout_width="wrap_content"
  47 + <TextView
  48 + android:id="@+id/tv_date"
  49 + android:layout_width="wrap_content"
  50 + android:layout_height="wrap_content"
  51 + android:layout_marginLeft="15dp"
  52 + android:layout_marginTop="5dp"
  53 + android:text="2019/06/10 9:51"
  54 + android:textColor="@color/text_gray"
  55 + android:textSize="10sp" />
  56 + </LinearLayout>
  57 + <!---->
  58 + <LinearLayout
  59 + android:layout_width="0dp"
99 60 android:layout_height="wrap_content"
100   - android:text="34'33''"
101   - android:textColor="@color/black"
102   - android:textSize="20sp"
103   - android:textStyle="bold" />
  61 + android:layout_weight="1"
  62 + android:gravity="right|bottom">
104 63  
105   - <TextView
106   - android:layout_width="wrap_content"
107   - android:layout_height="wrap_content"
108   - android:layout_marginTop="5dp"
109   - android:text="配速"
110   - android:textColor="@color/black"
111   - android:textSize="15sp" />
  64 + <TextView
  65 + android:id="@+id/tv_distance"
  66 + android:layout_width="wrap_content"
  67 + android:layout_height="wrap_content"
  68 + android:layout_marginRight="10dp"
  69 + android:text="1.53"
  70 + android:textColor="@color/text_black"
  71 + android:textSize="45sp"
  72 + android:textStyle="bold" />
  73 +
  74 + <TextView
  75 + android:layout_width="wrap_content"
  76 + android:layout_height="wrap_content"
  77 + android:layout_marginRight="15dp"
  78 + android:text="公里"
  79 + android:textColor="@color/text_black"
  80 + android:textSize="15sp" />
  81 + </LinearLayout>
  82 + <!---->
112 83 </LinearLayout>
113   - <!---->
  84 + <!--横线-->
  85 + <View
  86 + android:layout_width="match_parent"
  87 + android:layout_height="1dp"
  88 + android:layout_marginTop="10dp"
  89 + android:background="@color/line" />
  90 + <!--配速和用时-->
114 91 <LinearLayout
115   - android:layout_width="0dp"
  92 + android:layout_width="match_parent"
116 93 android:layout_height="wrap_content"
117   - android:layout_weight="1"
118   - android:gravity="center"
119   - android:orientation="vertical">
120   -
121   - <TextView
122   - android:layout_width="wrap_content"
  94 + android:layout_marginTop="10sp">
  95 + <!---->
  96 + <LinearLayout
  97 + android:layout_width="0dp"
123 98 android:layout_height="wrap_content"
124   - android:text="00:00:00"
125   - android:textColor="@color/black"
126   - android:textSize="20sp"
127   - android:textStyle="bold" />
  99 + android:layout_weight="1"
  100 + android:gravity="center"
  101 + android:orientation="vertical">
  102 +
  103 + <TextView
  104 + android:id="@+id/tv_speed"
  105 + android:layout_width="wrap_content"
  106 + android:layout_height="wrap_content"
  107 + android:text="34'33''"
  108 + android:textColor="@color/text_black"
  109 + android:textSize="20sp"
  110 + android:textStyle="bold" />
128 111  
129   - <TextView
130   - android:layout_width="wrap_content"
  112 + <TextView
  113 + android:layout_width="wrap_content"
  114 + android:layout_height="wrap_content"
  115 + android:layout_marginTop="5dp"
  116 + android:text="配速"
  117 + android:textColor="@color/text_black"
  118 + android:textSize="15sp" />
  119 + </LinearLayout>
  120 + <!---->
  121 + <LinearLayout
  122 + android:layout_width="0dp"
131 123 android:layout_height="wrap_content"
132   - android:layout_marginTop="5dp"
133   - android:text="用时"
134   - android:textColor="@color/black"
135   - android:textSize="15sp" />
  124 + android:layout_weight="1"
  125 + android:gravity="center"
  126 + android:orientation="vertical">
  127 +
  128 + <TextView
  129 + android:id="@+id/tv_timer"
  130 + android:layout_width="wrap_content"
  131 + android:layout_height="wrap_content"
  132 + android:text="00:00:00"
  133 + android:textColor="@color/text_black"
  134 + android:textSize="20sp"
  135 + android:textStyle="bold" />
  136 +
  137 + <TextView
  138 + android:layout_width="wrap_content"
  139 + android:layout_height="wrap_content"
  140 + android:layout_marginTop="5dp"
  141 + android:text="用时"
  142 + android:textColor="@color/text_black"
  143 + android:textSize="15sp" />
  144 + </LinearLayout>
  145 + <!---->
136 146 </LinearLayout>
137 147 <!---->
138 148 </LinearLayout>
139   - <!---->
140   - </LinearLayout>
141 149  
142   - <com.qmuiteam.qmui.widget.QMUIRadiusImageView
143   - android:id="@+id/qm_iv1"
144   - android:layout_width="60dp"
145   - android:layout_height="60dp"
146   - android:layout_marginLeft="10dp"
147   - android:background="@drawable/tc_ic_workout_level_adjust_coach"
148   - app:qmui_corner_radius="100dp" />
149   -</FrameLayout>
150 150 \ No newline at end of file
  151 + <com.qmuiteam.qmui.widget.QMUIRadiusImageView
  152 + android:id="@+id/qm_iv_icon"
  153 + android:layout_width="60dp"
  154 + android:layout_height="60dp"
  155 + android:layout_marginLeft="10dp"
  156 + android:background="@drawable/tc_ic_workout_level_adjust_coach"
  157 + app:qmui_corner_radius="100dp" />
  158 + </FrameLayout>
  159 +</layout>
151 160 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/layout/layout_run_detail_person_score.xml
... ... @@ -6,12 +6,11 @@
6 6 <!--个人最佳成绩-->
7 7 <LinearLayout
8 8 android:layout_width="match_parent"
9   - android:layout_height="150dp"
10   - android:layout_marginLeft="10dp"
11   - android:layout_marginTop="20dp"
12   - android:layout_marginRight="10dp"
13   - android:layout_marginBottom="10dp"
14   - android:background="@drawable/shape_10dp_white_raduis_bg"
  9 + android:layout_height="180dp"
  10 + android:layout_marginLeft="1dp"
  11 + android:layout_marginRight="1dp"
  12 + android:layout_marginBottom="5dp"
  13 + android:background="@drawable/layer_shadow"
15 14 android:orientation="vertical">
16 15  
17 16 <LinearLayout
... ... @@ -27,7 +26,7 @@
27 26 android:layout_marginLeft="10dp"
28 27 android:layout_weight="1"
29 28 android:text="个人最佳成绩"
30   - android:textColor="@color/black"
  29 + android:textColor="@color/text_black"
31 30 android:textSize="18sp"
32 31 android:textStyle="bold" />
33 32  
... ... @@ -37,7 +36,7 @@
37 36 android:layout_height="wrap_content"
38 37 android:layout_marginRight="10dp"
39 38 android:text="查看全部成绩 >"
40   - android:textColor="@color/black"
  39 + android:textColor="@color/text_black"
41 40 android:textSize="13sp" />
42 41 </LinearLayout>
43 42 <!---->
... ... @@ -58,7 +57,7 @@
58 57 android:layout_marginLeft="15dp"
59 58 android:text="1.53"
60 59 android:textColor="@color/black"
61   - android:textSize="25sp"
  60 + android:textSize="30sp"
62 61 android:textStyle="bold" />
63 62  
64 63 <TextView
... ... @@ -66,8 +65,8 @@
66 65 android:layout_height="wrap_content"
67 66 android:layout_marginLeft="5dp"
68 67 android:text="公里"
69   - android:textColor="@color/text_gray"
70   - android:textSize="15sp" />
  68 + android:textColor="@color/text_black"
  69 + android:textSize="12sp" />
71 70 </LinearLayout>
72 71 </LinearLayout>
73 72  
... ... @@ -88,15 +87,15 @@
88 87 android:layout_width="wrap_content"
89 88 android:layout_height="wrap_content"
90 89 android:text="步数"
91   - android:textColor="@color/text_gray"
92   - android:textSize="15sp" />
  90 + android:textColor="@color/text_black"
  91 + android:textSize="12sp" />
93 92  
94 93 <TextView
95 94 android:layout_width="wrap_content"
96 95 android:layout_height="wrap_content"
97 96 android:layout_marginTop="5dp"
98 97 android:text="1234"
99   - android:textColor="@color/black"
  98 + android:textColor="@color/text_black"
100 99 android:textSize="20sp"
101 100 android:textStyle="bold" />
102 101  
... ... @@ -113,10 +112,9 @@
113 112 <TextView
114 113 android:layout_width="wrap_content"
115 114 android:layout_height="wrap_content"
116   -
117 115 android:text="用时"
118   - android:textColor="@color/text_gray"
119   - android:textSize="15sp" />
  116 + android:textColor="@color/text_black"
  117 + android:textSize="12sp" />
120 118  
121 119 <TextView
122 120 android:layout_width="wrap_content"
... ... @@ -141,15 +139,15 @@
141 139 android:layout_width="wrap_content"
142 140 android:layout_height="wrap_content"
143 141 android:text="配速"
144   - android:textColor="@color/text_gray"
145   - android:textSize="15sp" />
  142 + android:textColor="@color/text_black"
  143 + android:textSize="12sp" />
146 144  
147 145 <TextView
148 146 android:layout_width="wrap_content"
149 147 android:layout_height="wrap_content"
150 148 android:layout_marginTop="5dp"
151 149 android:text="22'22''"
152   - android:textColor="@color/black"
  150 + android:textColor="@color/text_black"
153 151 android:textSize="20sp"
154 152 android:textStyle="bold" />
155 153  
... ...
moudle_pedometer/src/main/res/layout/layout_run_detail_rank.xml
... ... @@ -11,8 +11,11 @@
11 11 <LinearLayout
12 12 android:layout_width="match_parent"
13 13 android:layout_height="150dp"
14   - android:layout_margin="10dp"
15   - android:background="@drawable/shape_10dp_white_raduis_bg"
  14 + android:layout_marginLeft="1dp"
  15 + android:layout_marginTop="10dp"
  16 + android:layout_marginRight="1dp"
  17 + android:layout_marginBottom="15dp"
  18 + android:background="@drawable/layer_shadow"
16 19 android:orientation="vertical">
17 20  
18 21 <LinearLayout
... ... @@ -78,7 +81,7 @@
78 81 android:layout_marginTop="5dp"
79 82 android:text="@string/layout_run_detail_rank_person_finish"
80 83 android:textColor="@color/text_gray"
81   - android:textSize="15sp" />
  84 + android:textSize="12sp" />
82 85 </LinearLayout>
83 86 </LinearLayout>
84 87 <!--右侧-->
... ... @@ -99,8 +102,8 @@
99 102 android:layout_width="wrap_content"
100 103 android:layout_height="wrap_content"
101 104 android:text="00:27:23"
102   - android:textColor="@color/black"
103   - android:textSize="20sp"
  105 + android:textColor="@color/text_black"
  106 + android:textSize="18sp"
104 107 android:textStyle="bold" />
105 108  
106 109 <TextView
... ... @@ -109,24 +112,32 @@
109 112 android:layout_marginTop="5dp"
110 113 android:text="用户昵称"
111 114 android:textColor="@color/text_gray"
112   - android:textSize="15sp" />
  115 + android:textSize="12sp" />
113 116  
114 117 <!---->
115 118 </LinearLayout>
116 119  
117   - <LinearLayout
  120 + <FrameLayout
118 121 android:layout_width="wrap_content"
119   - android:layout_height="match_parent"
120   - android:gravity="center">
  122 + android:layout_height="match_parent">
121 123  
122 124 <com.qmuiteam.qmui.widget.QMUIRadiusImageView
123 125 android:layout_width="60dp"
124 126 android:layout_height="60dp"
  127 + android:layout_gravity="center"
125 128 android:layout_marginLeft="10dp"
126 129 android:layout_marginRight="15dp"
127 130 android:background="@drawable/tc_ic_workout_level_adjust_coach"
128 131 app:qmui_corner_radius="100dp" />
129   - </LinearLayout>
  132 +
  133 + <ImageView
  134 + android:layout_width="16dp"
  135 + android:layout_height="17dp"
  136 + android:layout_gravity="right"
  137 + android:layout_marginTop="10dp"
  138 + android:layout_marginRight="10dp"
  139 + android:background="@drawable/crown" />
  140 + </FrameLayout>
130 141 <!---->
131 142 </LinearLayout>
132 143  
... ...
moudle_pedometer/src/main/res/layout/layout_run_detail_street.xml
... ... @@ -34,6 +34,7 @@
34 34 android:layout_marginLeft="10dp"
35 35 android:layout_marginTop="10dp"
36 36 android:text="奥森南园跑道"
  37 + android:textColor="@color/text_black"
37 38 android:textSize="18sp"
38 39 android:textStyle="bold" />
39 40 <!--活动地点-->
... ... @@ -41,12 +42,13 @@
41 42 android:layout_width="match_parent"
42 43 android:layout_height="wrap_content"
43 44 android:layout_marginLeft="10dp"
44   - android:layout_marginTop="10dp">
  45 + android:layout_marginTop="10dp"
  46 + android:gravity="center_vertical">
45 47  
46 48 <ImageView
47   - android:layout_width="20dp"
48   - android:layout_height="20dp"
49   - android:background="@drawable/icon_race_location_green" />
  49 + android:layout_width="14dp"
  50 + android:layout_height="16dp"
  51 + android:background="@drawable/sport_location" />
50 52  
51 53 <TextView
52 54 android:layout_width="wrap_content"
... ... @@ -69,7 +71,7 @@
69 71 android:layout_height="wrap_content"
70 72 android:layout_marginLeft="25dp"
71 73 android:text="北京"
72   - android:textColor="@color/black"
  74 + android:textColor="@color/text_black"
73 75 android:textSize="15sp" />
74 76  
75 77 <TextView
... ... @@ -77,7 +79,7 @@
77 79 android:layout_height="wrap_content"
78 80 android:layout_marginLeft="25dp"
79 81 android:text="首都师范大学"
80   - android:textColor="@color/black"
  82 + android:textColor="@color/text_black"
81 83 android:textSize="15sp" />
82 84  
83 85 <TextView
... ... @@ -85,7 +87,7 @@
85 87 android:layout_height="wrap_content"
86 88 android:layout_marginLeft="25dp"
87 89 android:text="全长4.42公里"
88   - android:textColor="@color/black"
  90 + android:textColor="@color/text_black"
89 91 android:textSize="15sp" />
90 92 </LinearLayout>
91 93 </LinearLayout>
... ... @@ -156,7 +158,7 @@
156 158 android:layout_height="wrap_content"
157 159 android:layout_marginLeft="10dp"
158 160 android:text="首都师范大学操场东门"
159   - android:textColor="@color/black"
  161 + android:textColor="@color/text_black"
160 162 android:textSize="15sp" />
161 163 </LinearLayout>
162 164 <!--终点-->
... ... @@ -187,7 +189,7 @@
187 189 android:layout_height="wrap_content"
188 190 android:layout_marginLeft="10dp"
189 191 android:text="首都师范大学操场西门"
190   - android:textColor="@color/black"
  192 + android:textColor="@color/text_black"
191 193 android:textSize="15sp" />
192 194 </LinearLayout>
193 195  
... ... @@ -197,12 +199,13 @@
197 199 android:layout_width="match_parent"
198 200 android:layout_height="wrap_content"
199 201 android:layout_marginLeft="10dp"
200   - android:layout_marginTop="10dp">
  202 + android:layout_marginTop="10dp"
  203 + android:gravity="center_vertical">
201 204  
202 205 <ImageView
203   - android:layout_width="20dp"
204   - android:layout_height="20dp"
205   - android:background="@drawable/icon_race_location_green" />
  206 + android:layout_width="14dp"
  207 + android:layout_height="14dp"
  208 + android:background="@drawable/sport_time" />
206 209  
207 210 <TextView
208 211 android:layout_width="wrap_content"
... ... @@ -224,7 +227,7 @@
224 227 android:layout_height="wrap_content"
225 228 android:layout_marginLeft="25dp"
226 229 android:text="2019.05.01"
227   - android:textColor="@color/black"
  230 + android:textColor="@color/text_black"
228 231 android:textSize="15sp" />
229 232  
230 233 <TextView
... ... @@ -232,7 +235,7 @@
232 235 android:layout_height="match_parent"
233 236 android:layout_marginLeft="5dp"
234 237 android:text="——"
235   - android:textColor="@color/black"
  238 + android:textColor="@color/text_black"
236 239 android:textSize="15sp" />
237 240  
238 241 <TextView
... ... @@ -240,26 +243,29 @@
240 243 android:layout_height="wrap_content"
241 244 android:layout_marginLeft="5dp"
242 245 android:text="2019.09.01"
243   - android:textColor="@color/black"
  246 + android:textColor="@color/text_black"
244 247 android:textSize="15sp" />
245 248 </LinearLayout>
246 249  
247 250 <View
248 251 android:layout_width="match_parent"
249 252 android:layout_height="1dp"
  253 + android:layout_marginLeft="10dp"
250 254 android:layout_marginTop="5dp"
  255 + android:layout_marginRight="10dp"
251 256 android:background="@color/line" />
252 257 <!--活动时间-->
253 258 <LinearLayout
254 259 android:layout_width="match_parent"
255 260 android:layout_height="wrap_content"
256 261 android:layout_marginLeft="10dp"
257   - android:layout_marginTop="10dp">
  262 + android:layout_marginTop="10dp"
  263 + android:gravity="center_vertical">
258 264  
259 265 <ImageView
260   - android:layout_width="20dp"
261   - android:layout_height="20dp"
262   - android:background="@drawable/icon_race_location_green" />
  266 + android:layout_width="14dp"
  267 + android:layout_height="14dp"
  268 + android:background="@drawable/sport_time" />
263 269  
264 270 <TextView
265 271 android:layout_width="wrap_content"
... ... @@ -281,7 +287,7 @@
281 287 android:layout_height="wrap_content"
282 288 android:layout_marginLeft="25dp"
283 289 android:text="2019.05.01"
284   - android:textColor="@color/black"
  290 + android:textColor="@color/text_black"
285 291 android:textSize="15sp" />
286 292  
287 293 <TextView
... ... @@ -289,7 +295,7 @@
289 295 android:layout_height="match_parent"
290 296 android:layout_marginLeft="5dp"
291 297 android:text="——"
292   - android:textColor="@color/black"
  298 + android:textColor="@color/text_black"
293 299 android:textSize="15sp" />
294 300  
295 301 <TextView
... ... @@ -297,26 +303,29 @@
297 303 android:layout_height="wrap_content"
298 304 android:layout_marginLeft="5dp"
299 305 android:text="2019.09.01"
300   - android:textColor="@color/black"
  306 + android:textColor="@color/text_black"
301 307 android:textSize="15sp" />
302 308 </LinearLayout>
303 309  
304 310 <View
305 311 android:layout_width="match_parent"
306 312 android:layout_height="1dp"
  313 + android:layout_marginLeft="10dp"
307 314 android:layout_marginTop="5dp"
  315 + android:layout_marginRight="10dp"
308 316 android:background="@color/line" />
309 317 <!--参与人数-->
310 318 <LinearLayout
311 319 android:layout_width="match_parent"
312 320 android:layout_height="wrap_content"
313 321 android:layout_marginLeft="10dp"
314   - android:layout_marginTop="10dp">
  322 + android:layout_marginTop="10dp"
  323 + android:gravity="center_vertical">
315 324  
316 325 <ImageView
317   - android:layout_width="20dp"
318   - android:layout_height="20dp"
319   - android:background="@drawable/icon_race_location_green" />
  326 + android:layout_width="14dp"
  327 + android:layout_height="12dp"
  328 + android:background="@drawable/sport_people" />
320 329  
321 330 <TextView
322 331 android:layout_width="wrap_content"
... ... @@ -329,34 +338,41 @@
329 338 <!--相关的人数-->
330 339 <LinearLayout
331 340 android:layout_width="match_parent"
332   - android:layout_height="wrap_content"
  341 + android:layout_height="match_parent"
  342 + android:layout_marginBottom="20dp"
333 343 android:gravity="center_vertical">
334 344  
335   - <TextView
336   - android:layout_width="wrap_content"
  345 + <LinearLayout
  346 + android:layout_width="0dp"
337 347 android:layout_height="wrap_content"
338   - android:layout_marginLeft="25dp"
339   - android:text="123"
340   - android:textColor="@color/black"
341   - android:textSize="17sp"
342   - android:textStyle="bold" />
  348 + android:layout_weight="1">
343 349  
344   - <TextView
345   - android:layout_width="wrap_content"
346   - android:layout_height="wrap_content"
347   - android:layout_marginLeft="5dp"
348   - android:text="人参与"
349   - android:textColor="@color/black"
350   - android:textSize="15sp" />
  350 + <TextView
  351 + android:layout_width="wrap_content"
  352 + android:layout_height="wrap_content"
  353 + android:layout_marginLeft="28dp"
  354 + android:text="123"
  355 + android:textColor="@color/text_black"
  356 + android:textSize="17sp"
  357 + android:textStyle="bold" />
  358 +
  359 + <TextView
  360 + android:layout_width="wrap_content"
  361 + android:layout_height="wrap_content"
  362 + android:layout_marginLeft="5dp"
  363 + android:text="人参与"
  364 + android:textColor="@color/text_black"
  365 + android:textSize="15sp" />
  366 + </LinearLayout>
351 367  
352 368 <LinearLayout
353   - android:layout_width="match_parent"
  369 + android:layout_width="wrap_content"
354 370 android:layout_height="wrap_content"
355 371 android:gravity="right|center">
356 372  
357 373 <com.cnlive.moudle.pedometer.ui.widget.FivePersonIconView
358 374 android:id="@+id/five_join_person"
359   - android:layout_width="match_parent"
  375 + android:layout_width="180dp"
360 376 android:layout_height="40dp"
361 377 android:layout_marginRight="10dp"
362 378 FivePersonIconView:showRightFlag="true" />
... ...
moudle_pedometer/src/main/res/layout/layout_run_detail_street_introduce.xml
... ... @@ -2,9 +2,9 @@
2 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 3 android:layout_width="match_parent"
4 4 android:layout_height="wrap_content"
  5 + android:background="@color/white"
5 6 android:orientation="vertical"
6 7 android:paddingLeft="10dp"
7   - android:background="@color/white"
8 8 android:paddingRight="10dp">
9 9 <!--路线介绍-->
10 10 <TextView
... ... @@ -21,7 +21,7 @@
21 21 android:layout_height="wrap_content"
22 22 android:layout_marginTop="10dp"
23 23 android:text="路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍路线介绍"
24   - android:textColor="@color/black"
  24 + android:textColor="@color/text_black"
25 25 android:textSize="15sp" />
26 26  
27 27 <!--地图-->
... ... @@ -37,7 +37,7 @@
37 37 android:layout_width="match_parent"
38 38 android:layout_height="500dp"
39 39 android:layout_marginTop="10dp"
40   - android:layout_marginBottom="10dp"
  40 + android:layout_marginBottom="60dp"
41 41 android:background="@drawable/map"
42 42 android:scaleType="center" />
43 43 </LinearLayout>
44 44 \ No newline at end of file
... ...
moudle_pedometer/src/main/res/values/colors.xml
... ... @@ -2,8 +2,8 @@
2 2 <resources>
3 3 <color name="run_main_bg">#3D3745</color>
4 4 <color name="run_main_time_bg">#5BC4A4</color>
5   - <color name="text_gray">#8F8C95</color>
6   - <color name="green_round">#29C48A</color>
  5 + <color name="text_gray">#666666</color>
  6 + <color name="green_round">#5BC4A4</color>
7 7 <color name="red_round">#F97070</color>
8 8 <color name="gray_round">#D6D6D6</color>
9 9 <color name="circle_stop">#40000000</color>
... ... @@ -26,6 +26,6 @@
26 26 <color name="red">#EF5544</color>
27 27 <color name="bg">#012648</color>
28 28  
29   -
30   - <color name="bottom_sheet_dialog_race_location_text">#C3C3C3</color>
  29 + <color name="text_black">#333333</color>
  30 + <color name="bottom_sheet_dialog_race_location_text">#999999</color>
31 31 </resources>
... ...
moudle_pedometer/src/main/res/values/strings.xml
... ... @@ -44,6 +44,9 @@
44 44 <string name="layout_run_detail_rank_person_finish">人已完成</string>
45 45 <string name="layout_run_detail_street_introduce_title">路线介绍</string>
46 46 <string name="layout_run_detail_street_introduce_map">路线地图</string>
  47 + <string name="loc_check_internet">定位失败,请您检查您的网络状态!</string>
  48 + <string name="loc_open_gps">定位失败,建议您打开GPS!</string>
  49 + <string name="loc_open_wifi">定位失败,建议您打开Wi-Fi!</string>
47 50 <string name="beijing">北京</string>
48 51 <string name="goline">约跑线路</string>
49 52 <string name="myactivity">我的活动</string>
... ...