diff --git a/.idea/misc.xml b/.idea/misc.xml
index bcf70f3..d01cd1e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -14,7 +14,8 @@
-
+
+
@@ -23,6 +24,9 @@
+
+
+
diff --git a/modulesCore/main/src/main/debug/AndroidManifest.xml b/modulesCore/main/src/main/debug/AndroidManifest.xml
index 6b4fd0b..f3c2a29 100644
--- a/modulesCore/main/src/main/debug/AndroidManifest.xml
+++ b/modulesCore/main/src/main/debug/AndroidManifest.xml
@@ -1,7 +1,7 @@
+ package="com.example.modulescore.main">
@@ -17,13 +17,16 @@
tools:ignore="ProtectedPermissions" />
-
+ .
+ android:supportsRtl="true">
+
@@ -33,9 +36,10 @@
+ android:launchMode="singleTask">
+
@@ -47,9 +51,11 @@
android:name=".Activities.RunningActivity"
android:exported="true"
android:launchMode="singleInstance" />
+
+
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/PreRunActivity.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/PreRunActivity.java
index 5a9c9ef..dcae770 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/PreRunActivity.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/PreRunActivity.java
@@ -129,6 +129,14 @@ private void myRequestPermissions(){
//申请WRITE_EXTERNAL_STORAGE权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
WRITE_COARSE_LOCATION_REQUEST_CODE);
+ } else if(ContextCompat.checkSelfPermission(this, Manifest.permission.WAKE_LOCK)
+ != PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WAKE_LOCK},
+ WRITE_COARSE_LOCATION_REQUEST_CODE);
+ }else if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ != PackageManager.PERMISSION_GRANTED){
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+ WRITE_COARSE_LOCATION_REQUEST_CODE);
}
}
}
\ No newline at end of file
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunActivity.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunActivity.java
index 537c3e5..ad73aa7 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunActivity.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunActivity.java
@@ -1,12 +1,10 @@
package com.example.modulescore.main.Activities;
-import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -20,12 +18,10 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.core.app.ActivityCompat;
-import androidx.core.content.ContextCompat;
import com.amap.api.maps.model.LatLng;
-import com.example.modulescore.main.DataBase.MyDataBase;
-import com.example.modulescore.main.DataBase.RunningRecord;
+import com.example.modulespublic.common.base.MyDataBase;
+import com.example.modulespublic.common.base.RunningRecord;
import com.example.modulescore.main.EventBus.MessageEvent;
import com.example.modulescore.main.UI.View.ProgressButton;
import com.example.modulescore.main.R;
@@ -38,6 +34,7 @@
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import java.util.Date;
import java.util.List;
public class RunActivity extends AppCompatActivity implements View.OnClickListener {
@@ -55,6 +52,8 @@ public class RunActivity extends AppCompatActivity implements View.OnClickListen
RunningRecord record = new RunningRecord();
TextView calorieText;
List mPathPointsLine;
+ Date startTime;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -88,24 +87,23 @@ protected void onCreate(Bundle savedInstanceState) {
public void onFinish() {
final String TAG = "FINISH_RUNNING";
Log.d(TAG,"start finish");
+ //record.setId(Long.valueOf(001));
+ record.setUserId("1");
record.setCalorie((String) calorieText.getText());
record.setDistance( distanceview.getText());
Log.d(TAG,passedSeconds.toString());
record.setRunningtime(passedSeconds);
- Log.d(TAG,"0");
record.setSpeed((String) speedText.getText());
- Log.d(TAG,"1");
record.setPathPointsLine(mPathPointsLine);
- Log.d(TAG,"2");
+ record.setStartTime(startTime);
new Thread(new Runnable() {
@Override
public void run() {
MyDataBase.getsInstance(getApplicationContext()).runningDao().insertRunningRecord(record);
Log.d(TAG,record.toString());
- Log.d(TAG,MyDataBase.getsInstance(getApplicationContext()).runningDao().loadAllRunningRecordss().toString());
+ Log.d(TAG+"length", String.valueOf(MyDataBase.getsInstance(getApplicationContext()).runningDao().loadAllRunningRecordss().length));
}
}).start();
- Log.d(TAG,"finish finish");
finish();
}
@@ -231,6 +229,9 @@ record = event.getRunningRecord();
if(event.getmPathPointsLine()!=null){
mPathPointsLine = event.getmPathPointsLine();
}
+ if(event.getStartTime()!=null){
+ startTime = event.getStartTime();
+ }
};
@Override
protected void onDestroy() {
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunningActivity.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunningActivity.java
index 2c02ade..d01a0ef 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunningActivity.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/RunningActivity.java
@@ -28,7 +28,7 @@
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.maps.model.PolylineOptions;
-import com.example.modulescore.main.DataBase.RunningRecord;
+import com.example.modulespublic.common.base.RunningRecord;
import com.example.modulescore.main.EventBus.MessageEvent;
import com.example.modulescore.main.R;
import com.example.modulescore.main.Util.TimeManager;
@@ -80,6 +80,8 @@ public class RunningActivity extends AppCompatActivity implements LocationSource
int weight = 60;
RunningRecord record = new RunningRecord();
private DecimalFormat decimalFormat = new DecimalFormat("0.00");
+ MessageEvent messageEvent = new MessageEvent();//跑步时间
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -103,9 +105,9 @@ public void onClick(View view) {
tv_mapDistance = findViewById(R.id.distanceTicker);
tv_mapDistance.setCharacterLists(TickerUtils.provideNumberList());
tv_mapDistance.setAnimationDuration(500);
-
initMapUI();
initLoc();
+ messageEvent.setStartTime(startTime);
Intent startRunIntent = new Intent(this,RunActivity.class);
startActivity(startRunIntent);
if(getIntent().getType()!= null && getIntent().getType().equals(TargetDistanceActivity.isTarget)){
@@ -188,8 +190,6 @@ private void initLoc() {
@Override
public void onLocationChanged(AMapLocation amapLocation) {
String TAG = "RunningActivity_LocationChanged";
- MessageEvent messageEvent = new MessageEvent();//跑步时间
- Log.d(TAG,"");
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
float nowSpeed = amapLocation.getSpeed();
@@ -230,13 +230,13 @@ public void onLocationChanged(AMapLocation amapLocation) {
}else if(isFirstLoc){//如果是第一次,那么改isFirstLoc为false,则之后都不是第一次了
//设置缩放级别
Log.d(TAG,"FirstLoc");
- aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
- aMap.moveCamera(CameraUpdateFactory.changeTilt(0));
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(18));//设置地图缩放级别。
+ aMap.moveCamera(CameraUpdateFactory.changeTilt(0));//设置地图倾斜度。
isFirstLoc = false;
Log.d(TAG,"FirstLoc0");
}
//将地图移动到定位点
- aMap.moveCamera(CameraUpdateFactory.changeLatLng(nowLatLng));
+ aMap.moveCamera(CameraUpdateFactory.changeLatLng(nowLatLng));//设置地图的中心点。
//点击定位按钮 能够将地图的中心移动到定位点
mListener.onLocationChanged(amapLocation);
Log.d(TAG,"FirstLoc00");
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/TargetDistanceActivity.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/TargetDistanceActivity.java
index 430b65d..ff30e69 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/TargetDistanceActivity.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Activities/TargetDistanceActivity.java
@@ -104,7 +104,6 @@ public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tab.setText(tabs[position]);
}
}).attach();
-
btn_back.setOnClickListener(this);
startDistanceRunView.setOnClickListener(this);
}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/EventBus/MessageEvent.java b/modulesCore/main/src/main/java/com/example/modulescore/main/EventBus/MessageEvent.java
index 997dc1d..7f72500 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/EventBus/MessageEvent.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/EventBus/MessageEvent.java
@@ -2,8 +2,9 @@
import com.amap.api.maps.model.LatLng;
-import com.example.modulescore.main.DataBase.RunningRecord;
+import com.example.modulespublic.common.base.RunningRecord;
+import java.util.Date;
import java.util.List;
public class MessageEvent {
@@ -13,6 +14,15 @@ public class MessageEvent {
private RunningRecord runningRecord;
private String calorie;
private List mPathPointsLine;
+ private Date startTime;
+
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime;
+ }
public List getmPathPointsLine() {
return mPathPointsLine;
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Pre/PreDataFragment.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Pre/PreDataFragment.java
index bf2ce71..0629bae 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Pre/PreDataFragment.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Pre/PreDataFragment.java
@@ -1,11 +1,10 @@
package com.example.modulescore.main.Pre;
+import android.content.Intent;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
-import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
@@ -15,12 +14,15 @@
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.example.modulescore.main.DataBase.MyDataBase;
-import com.example.modulescore.main.DataBase.RunningRecord;
+import com.example.modulespublic.common.base.MyDataBase;
+import com.example.modulespublic.common.base.RunningRecord;
import com.example.modulescore.main.R;
+import com.example.modulescore.main.Trace.TraceActivity;
import com.example.modulescore.main.Util.TimeManager;
-public class PreDataFragment extends Fragment {
+import java.text.SimpleDateFormat;
+
+public class PreDataFragment extends Fragment implements View.OnClickListener{
public PreDataFragment() {
}
LinearLayout linearLayout;
@@ -35,17 +37,16 @@ public void onCreate(Bundle savedInstanceState) {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- final String TAG = "PreDataFragmentonCreateViewTAG";
+
// Inflate the layout for this fragment
- View view = inflater.inflate(R.layout.fragment_pre_data, container, false);
+ View view = inflater.inflate(R.layout.pre_data_item0, container, false);
linearLayout = view.findViewById(R.id.linearlayout_pre_data);
- Handler handler = new Handler(Looper.getMainLooper()){
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- RefreshDataItem();
- }
- };
+ QueryAllRunningRecords();
+ return view;
+ }
+
+ private void QueryAllRunningRecords(){
+ final String TAG = "QueryAllRunningRecordsTAG";
new Thread(new Runnable() {
@Override
public void run() {
@@ -56,9 +57,7 @@ public void run() {
preHandler.sendMessage(message);
}
}).start();
- return view;
}
-
public void RefreshDataItem(){
final String TAG = "RefreshDataItem";
Log.d(TAG, String.valueOf(runningRecords.length));
@@ -72,12 +71,33 @@ private void LinearAddView(RunningRecord record){
TextView distancetext = view.findViewById(R.id.distancetext_runrecord);
TextView durationtext = view.findViewById(R.id.duration_text_runrecorditem);
TextView calorietext = view.findViewById(R.id.calorietext_runrecoritem);
- //startTimetext.setText(TimeManager.formatseconds(record.getStartTime()));
- distancetext.setText(record.getDistance());
+ TextView speedtext = view.findViewById(R.id.speedtext_runrecoritem);
+ TextView recordDateText = view.findViewById(R.id.runrecord_Date);
+ SimpleDateFormat yearFormat = new SimpleDateFormat ("yyyy年");
+ SimpleDateFormat dateFormat = new SimpleDateFormat ("MM月dd日");
+ SimpleDateFormat minuteFormat = new SimpleDateFormat ("hh:mm");
+ recordDateText.setText(dateFormat.format(record.getStartTime()));
+ startTimetext.setText(minuteFormat.format(record.getStartTime()));
+ distancetext.setText(record.getDistance()+","+record.getId());
durationtext.setText(TimeManager.formatseconds(record.getRunningtime()));
calorietext.setText(record.getCalorie());
+ speedtext.setText(record.getSpeed());
linearLayout.addView(view);
+ view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(getActivity(), TraceActivity.class);
+ intent.setType(String.valueOf(record.getId()));
+ startActivity(intent);
+ }
+ });
Log.d("LinearAddView","FINISH");
}
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()){
+
+ }
+ }
}
\ No newline at end of file
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScrollPickerView.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScrollPickerView.java
index bb02204..0578d5f 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScrollPickerView.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScrollPickerView.java
@@ -3,10 +3,8 @@
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
-import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
@@ -16,6 +14,7 @@
import androidx.recyclerview.widget.RecyclerView;
import com.example.modulescore.main.R;
+import com.example.modulescore.main.Util.ScreenUtil;
public class ScrollPickerView extends RecyclerView {
//
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/TargetAdapter.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Target/TargetAdapter.java
index 1043f97..56f3642 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/TargetAdapter.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Target/TargetAdapter.java
@@ -98,6 +98,7 @@ public int getItemViewType(int position) {
}
return 0;
}
+
public int getViewPagerPostion() {
return viewPagerPostion;
}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceActivity.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceActivity.java
new file mode 100644
index 0000000..53e362b
--- /dev/null
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceActivity.java
@@ -0,0 +1,69 @@
+package com.example.modulescore.main.Trace;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewpager2.widget.ViewPager2;
+
+import android.os.Bundle;
+import android.os.Looper;
+import android.os.Message;
+
+import com.example.modulespublic.common.base.MyDataBase;
+import com.example.modulespublic.common.base.RunningRecord;
+import com.example.modulescore.main.R;
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
+
+public class TraceActivity extends AppCompatActivity {
+
+ final String[] tabs = new String[]{"轨迹","信息"};
+ ViewPager2 viewPager2;
+ TabLayout tabLayout;
+ RunningRecord selectedRecord;
+ Bundle savedInstanceState;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ this.savedInstanceState = savedInstanceState;
+ setContentView(R.layout.activity_trace);
+ Long recordId = Long.parseLong(getIntent().getType());
+ TraceHandler traceHandler = new TraceHandler(this,Looper.getMainLooper());
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ selectedRecord = MyDataBase.getsInstance(getApplicationContext()).runningDao().queryRunningRecordById(recordId);
+ Message message = new Message();
+ message.what = traceHandler.finishQuery;
+ traceHandler.sendMessage(message);
+ }
+ }).start();
+ viewPager2 = findViewById(R.id.viewpager2_TarceActivity);
+ tabLayout = findViewById(R.id.tabLayout_TarceActivity);
+ viewPager2.setOrientation(viewPager2.ORIENTATION_HORIZONTAL);
+ viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ super.onPageScrolled(position, positionOffset, positionOffsetPixels);
+ }
+ @Override
+ public void onPageSelected(int position) {
+ super.onPageSelected(position);
+ }
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ super.onPageScrollStateChanged(state);
+ }
+ });
+ viewPager2.setOffscreenPageLimit(1);
+ }
+ public void initViewPager2Adapter(){
+ TraceAdapter traceAdapter = new TraceAdapter(selectedRecord,this,savedInstanceState);
+ viewPager2.setAdapter(traceAdapter);
+ new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
+ @Override
+ public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
+ tab.setText(tabs[position]);
+ }
+ }).attach();
+ }
+}
\ No newline at end of file
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceAdapter.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceAdapter.java
new file mode 100644
index 0000000..dc10818
--- /dev/null
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceAdapter.java
@@ -0,0 +1,65 @@
+package com.example.modulescore.main.Trace;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.amap.api.maps.model.LatLng;
+import com.example.modulespublic.common.base.RunningRecord;
+import com.example.modulescore.main.R;
+
+import java.util.ArrayList;
+
+public class TraceAdapter extends RecyclerView.Adapter {
+ private RunningRecord selectedRecord;
+ private Bundle savedInstanceState;
+ private TraceActivity traceActivity;
+ public TraceAdapter(RunningRecord selectedRecord,TraceActivity traceActivity,Bundle savedInstanceState) {
+ this.selectedRecord = selectedRecord;
+ this.savedInstanceState = savedInstanceState;
+ this.traceActivity =traceActivity;
+ }
+
+ public enum ItemType {
+ ITEM0, ITEM1
+ }
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ if(viewType == TraceAdapter.ItemType.ITEM0.ordinal()) {
+ return new TraceViewHolder0(selectedRecord,savedInstanceState,traceActivity,LayoutInflater.from(parent.getContext()).inflate(R.layout.trace_item0, parent, false));
+ }else if(viewType == TraceAdapter.ItemType.ITEM1.ordinal()){
+ return new TraceViewHolder1(selectedRecord,LayoutInflater.from(parent.getContext()).inflate(R.layout.trace_item1,parent,false));
+ }
+ return null;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ if(holder instanceof TraceViewHolder0){
+ TraceViewHolder0 traceViewHolder0 = (TraceViewHolder0) holder;
+ ArrayList pathPointsLine = (ArrayList) selectedRecord.getPathPointsLine();
+ traceViewHolder0.addTrace(pathPointsLine.get(0),pathPointsLine.get(pathPointsLine.size()-1),pathPointsLine);
+ }else {
+ TraceViewHolder1 traceViewHolder1 = (TraceViewHolder1) holder;
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return 2;
+ }
+
+
+ @Override
+ public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
+ super.onViewRecycled(holder);
+ if(holder instanceof TraceViewHolder0){
+ TraceViewHolder0 holder0 = (TraceViewHolder0)holder;
+ holder0.onDestory();
+ }
+ }
+}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceHandler.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceHandler.java
new file mode 100644
index 0000000..29c5c68
--- /dev/null
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceHandler.java
@@ -0,0 +1,32 @@
+package com.example.modulescore.main.Trace;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+public class TraceHandler extends Handler {
+ public final static int finishQuery = 1;
+ private TraceActivity traceActivity;
+ public TraceHandler(TraceActivity traceActivity,@NonNull Looper looper) {
+ super(looper);
+ this.traceActivity = traceActivity;
+ }
+
+ public TraceHandler(@NonNull Looper looper, @Nullable Callback callback) {
+ super(looper, callback);
+ }
+
+ @Override
+ public void handleMessage(@NonNull Message msg) {
+ super.handleMessage(msg);
+ switch (msg.what){
+ case finishQuery:
+ traceActivity.initViewPager2Adapter();
+ break;
+ }
+ }
+
+}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder0.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder0.java
new file mode 100644
index 0000000..9eb24af
--- /dev/null
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder0.java
@@ -0,0 +1,119 @@
+package com.example.modulescore.main.Trace;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.amap.api.location.AMapLocationClient;
+import com.amap.api.location.AMapLocationClientOption;
+import com.amap.api.maps.AMap;
+import com.amap.api.maps.CameraUpdateFactory;
+import com.amap.api.maps.TextureMapView;
+import com.amap.api.maps.UiSettings;
+import com.amap.api.maps.model.BitmapDescriptorFactory;
+import com.amap.api.maps.model.LatLng;
+import com.amap.api.maps.model.LatLngBounds;
+import com.amap.api.maps.model.MarkerOptions;
+import com.amap.api.maps.model.MyLocationStyle;
+import com.amap.api.maps.model.Polyline;
+import com.amap.api.maps.model.PolylineOptions;
+import com.example.modulespublic.common.base.RunningRecord;
+import com.example.modulescore.main.R;
+
+import java.util.List;
+
+public class TraceViewHolder0 extends RecyclerView.ViewHolder {
+ private PolylineOptions polylineOptions;
+ private Polyline polyline;
+ private AMap aMap;
+ private List latLngList;
+ TextureMapView mapView;
+ private AMapLocationClient locationClient;
+ private AMapLocationClientOption LocationOption;
+ private RunningRecord selectedRecord;
+ private Bundle savedInstanceState;
+
+ private TraceActivity traceActivity;
+ public TraceViewHolder0(RunningRecord selectedRecord,Bundle savedInstanceState,TraceActivity traceActivity,@NonNull View itemView) {
+ super(itemView);
+ mapView = itemView.findViewById(R.id.mapView_tracefragment0);
+ this.selectedRecord = selectedRecord;
+ this.savedInstanceState = savedInstanceState;
+ this.traceActivity =traceActivity;
+ initMap();
+ }
+
+ private void initMap(){
+
+ mapView.onCreate(savedInstanceState);// 此方法必须重写
+ mapView.onResume();
+ //初始化地图控制器对象
+ aMap = mapView.getMap();
+ //设置地图模式普通地图
+ aMap.setMapType(AMap.MAP_TYPE_NORMAL);
+ //设置定位源(locationSource)。
+ //aMap.setLocationSource(this);
+ //设置是否打开定位图层(myLocationOverlay)。
+ aMap.setMyLocationEnabled(true);
+
+ //设置显示定位按钮 并且可以点击
+ UiSettings settings = aMap.getUiSettings();
+ //设置定位按钮是否可见。
+ settings.setMyLocationButtonEnabled(true);
+
+ //定位小蓝点(当前位置)的绘制样式类。
+ MyLocationStyle myLocationStyle = new MyLocationStyle();
+ //设置圆形的填充颜色
+ myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));
+ // 设置圆形的边框颜色
+ myLocationStyle.strokeColor(Color.TRANSPARENT);
+ //设置是否显示定位小蓝点,true 显示,false不显示。
+ myLocationStyle.showMyLocation(true);
+ //设置我的位置展示模式,定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。
+ myLocationStyle.myLocationType(myLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
+ //设置定位图层,我的位置图层(myLocationOverlay)的样式。
+ aMap.setMyLocationStyle(myLocationStyle);
+ }
+ public void addTrace(LatLng startPoint, LatLng endPoint,
+ List pathList){
+ polylineOptions = new PolylineOptions()
+ .addAll(pathList)
+ .width(20)
+ .color(ContextCompat.getColor(traceActivity, R.color.green));//追加一批顶点到线段的坐标集合。
+ aMap.addPolyline(polylineOptions);
+ aMap.addMarker(new MarkerOptions().position(
+ startPoint).icon(
+ BitmapDescriptorFactory.fromResource(R.drawable.startpoint)));
+ aMap.addMarker(new MarkerOptions().position(
+ endPoint).icon(
+ BitmapDescriptorFactory.fromResource(R.drawable.endpoint)));
+ try {
+ aMap.moveCamera(CameraUpdateFactory.zoomTo(18));//设置地图缩放级别。
+ //设置显示在规定屏幕范围内的地图经纬度范围。
+ //设置经纬度范围和mapView边缘的空隙,单位像素。这个值适用于区域的四个边。
+ aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(getBounds(), 16));//设置显示在规定屏幕范围内的地图经纬度范围。
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private LatLngBounds getBounds() {//经纬度划分的一个矩形区域。
+ LatLngBounds.Builder b = LatLngBounds.builder();
+ if (latLngList == null) {
+ return b.build();
+ }
+ for (int i = 0; i < latLngList.size(); i++) {
+//区域包含传入的坐标。区域将进行小范围延伸包含传入的坐标。 更准确来说,它会考虑向东或向西方向扩展(哪一种方法可能环绕地图),
+//并选择最小扩展的方法。 如果两种方向得到的矩形区域大小相同,则会选择向东方向扩展。
+ b.include(latLngList.get(i));
+ }
+ return b.build();
+ }
+ public void onDestory(){
+ mapView.onDestroy();
+ }
+}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder1.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder1.java
new file mode 100644
index 0000000..a3ff276
--- /dev/null
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Trace/TraceViewHolder1.java
@@ -0,0 +1,19 @@
+package com.example.modulescore.main.Trace;
+
+
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.modulespublic.common.base.RunningRecord;
+
+public class TraceViewHolder1 extends RecyclerView.ViewHolder {
+
+ private RunningRecord selectedRecord;
+ public TraceViewHolder1(RunningRecord selectedRecord,@NonNull View itemView) {
+ super(itemView);
+ this.selectedRecord = selectedRecord;
+ }
+
+}
\ No newline at end of file
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScreenUtil.java b/modulesCore/main/src/main/java/com/example/modulescore/main/Util/ScreenUtil.java
similarity index 95%
rename from modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScreenUtil.java
rename to modulesCore/main/src/main/java/com/example/modulescore/main/Util/ScreenUtil.java
index 3fc0309..891d634 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/Target/ScreenUtil.java
+++ b/modulesCore/main/src/main/java/com/example/modulescore/main/Util/ScreenUtil.java
@@ -1,4 +1,4 @@
-package com.example.modulescore.main.Target;
+package com.example.modulescore.main.Util;
import android.content.res.Resources;
import android.util.DisplayMetrics;
diff --git a/modulesCore/main/src/main/res/layout/activity_trace.xml b/modulesCore/main/src/main/res/layout/activity_trace.xml
new file mode 100644
index 0000000..853db1d
--- /dev/null
+++ b/modulesCore/main/src/main/res/layout/activity_trace.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modulesCore/main/src/main/res/layout/fragment_pre_data.xml b/modulesCore/main/src/main/res/layout/pre_data_item0.xml
similarity index 93%
rename from modulesCore/main/src/main/res/layout/fragment_pre_data.xml
rename to modulesCore/main/src/main/res/layout/pre_data_item0.xml
index e32a7d5..0fd5c26 100644
--- a/modulesCore/main/src/main/res/layout/fragment_pre_data.xml
+++ b/modulesCore/main/src/main/res/layout/pre_data_item0.xml
@@ -51,10 +51,6 @@
app:layout_constraintTop_toBottomOf="@id/distancetext_fragment_predata"
app:layout_constraintBottom_toBottomOf="parent"
android:orientation="vertical">
-
\ No newline at end of file
diff --git a/modulesCore/main/src/main/res/layout/runrecord_item.xml b/modulesCore/main/src/main/res/layout/runrecord_item.xml
index 04b942b..7e68874 100644
--- a/modulesCore/main/src/main/res/layout/runrecord_item.xml
+++ b/modulesCore/main/src/main/res/layout/runrecord_item.xml
@@ -2,31 +2,40 @@
+
-
-sys
+ android:textSize="21sp"/>
+ android:textSize="14sp"/>
+ android:textSize="14sp"/>
+
+
+
\ No newline at end of file
diff --git a/modulesCore/main/src/main/res/layout/trace_item1.xml b/modulesCore/main/src/main/res/layout/trace_item1.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/modulesCore/main/src/main/res/layout/trace_item1.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/LatLngTypeConverter.java b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/Converters.java
similarity index 52%
rename from modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/LatLngTypeConverter.java
rename to modulesPublic/common/src/main/java/com/example/modulespublic/common/base/Converters.java
index 9dc8727..f978ede 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/LatLngTypeConverter.java
+++ b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/Converters.java
@@ -1,4 +1,4 @@
-package com.example.modulescore.main.DataBase;
+package com.example.modulespublic.common.base;
import androidx.room.TypeConverter;
@@ -8,25 +8,33 @@
import java.lang.reflect.Type;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
-public class LatLngTypeConverter {
+public class Converters {
+ @TypeConverter
+ public static Date fromTimestamp(Long value) {
+ return value == null ? null : new Date(value);
+ }
+
+ @TypeConverter
+ public static Long dateToTimestamp(Date date) {
+ return date == null ? null : date.getTime();
+ }
Gson gson = new Gson();
@TypeConverter
- public List stringToSomeObjectList(String data) {
+ public List LatLngListToSomeObjectList(String data) {
if (data == null) {
return Collections.emptyList();
}
-
Type listType = new TypeToken>() {}.getType();
-
return gson.fromJson(data, listType);
}
@TypeConverter
- public String someObjectListToString(List someObjects) {
+ public String someObjectListToLatLngList(List someObjects) {
return gson.toJson(someObjects);
}
}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/MyDataBase.java b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/MyDataBase.java
similarity index 78%
rename from modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/MyDataBase.java
rename to modulesPublic/common/src/main/java/com/example/modulespublic/common/base/MyDataBase.java
index 27f85dd..a91e88c 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/MyDataBase.java
+++ b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/MyDataBase.java
@@ -1,21 +1,16 @@
-package com.example.modulescore.main.DataBase;
+package com.example.modulespublic.common.base;
import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.room.AutoMigration;
import androidx.room.Database;
-import androidx.room.DatabaseConfiguration;
-import androidx.room.InvalidationTracker;
import androidx.room.Room;
import androidx.room.RoomDatabase;
-import androidx.sqlite.db.SupportSQLiteOpenHelper;
-
-import java.lang.annotation.Annotation;
+import androidx.room.TypeConverters;
//数据库持有者,并作为与应用持久关联数据的底层连接的主要访问点。在运行时,
//通过Room.databaseBuilder() 或者 Room.inMemoryDatabaseBuilder()获取Database实例。
@Database(entities = {RunningRecord.class}, version = 1, exportSchema = false)
+@TypeConverters({Converters.class})
public abstract class MyDataBase extends RoomDatabase {
private static MyDataBase Instance;
public MyDataBase() {
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningDao.java b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningDao.java
similarity index 75%
rename from modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningDao.java
rename to modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningDao.java
index 3ae2f36..13ad0d5 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningDao.java
+++ b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningDao.java
@@ -1,4 +1,4 @@
-package com.example.modulescore.main.DataBase;
+package com.example.modulespublic.common.base;
import androidx.room.Dao;
import androidx.room.Delete;
@@ -7,11 +7,10 @@
import androidx.room.Query;
import androidx.room.Update;
-import java.util.List;
@Dao
public interface RunningDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
- public void insertRunningRecord(RunningRecord... record);//插入多个数据
+ public void insertRunningRecord(RunningRecord... record);//插入多个数据,冲突策略是取代旧数据同时继续事务
@Insert
public void insertBothRunningRecords(RunningRecord record1, RunningRecord record2);
@Update
@@ -20,4 +19,6 @@ public interface RunningDao {
public void deleteRunningRecordss(RunningRecord... records);
@Query("SELECT * FROM RunningRecord")
public RunningRecord[] loadAllRunningRecordss();
+ @Query("SELECT * FROM RunningRecord where id = :id")
+ public RunningRecord queryRunningRecordById(Long id);
}
diff --git a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningRecord.java b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningRecord.java
similarity index 83%
rename from modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningRecord.java
rename to modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningRecord.java
index 3bb9939..5b43d7a 100644
--- a/modulesCore/main/src/main/java/com/example/modulescore/main/DataBase/RunningRecord.java
+++ b/modulesPublic/common/src/main/java/com/example/modulespublic/common/base/RunningRecord.java
@@ -1,4 +1,4 @@
-package com.example.modulescore.main.DataBase;
+package com.example.modulespublic.common.base;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
@@ -10,6 +10,7 @@
import com.amap.api.maps.model.LatLng;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
@Entity(tableName = "RunningRecord")
@@ -20,26 +21,31 @@ public class RunningRecord {
// 当这个主键是一个字符串时,还要加上@NonNull注解,不然会出现编译错误。
@PrimaryKey
private Long id;
-
//运动轨迹
//表示这是数据库表中的一个列。其中的name表示此对象在表中对应的类名,
// 如果不添加此注解,Room默认会以此变量名作为其在表中的列名。
- @TypeConverters(LatLngTypeConverter.class)
private List PathPointsLine;
//运动距离
private String Distance;
//运动时长
private Long Runningtime;
//运动开始时间
- private Long StartTime;
+ private Date StartTime;
//消耗卡路里
private String Calorie;
//平均时速(公里/小时)
private String Speed;
//平均配速(分钟/公里)
private Double Distribution;
- //日期标记
- private String DateTag;
+ private String UserId;
+
+ public String getUserId() {
+ return UserId;
+ }
+
+ public void setUserId(String userId) {
+ UserId = userId;
+ }
@Override
public String toString() {
@@ -52,10 +58,17 @@ public String toString() {
", Calorie='" + Calorie + '\'' +
", Speed='" + Speed + '\'' +
", Distribution=" + Distribution +
- ", DateTag='" + DateTag + '\'' +
'}';
}
+ public Date getStartTime() {
+ return StartTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ StartTime = startTime;
+ }
+
public Long getId() {
return id;
}
@@ -88,14 +101,6 @@ public void setRunningtime(Long runningtime) {
Runningtime = runningtime;
}
- public Long getStartTime() {
- return StartTime;
- }
-
- public void setStartTime(Long startTime) {
- StartTime = startTime;
- }
-
public String getCalorie() {
return Calorie;
}
@@ -115,16 +120,4 @@ public void setSpeed(String speed) {
public Double getDistribution() {
return Distribution;
}
-
- public void setDistribution(Double distribution) {
- Distribution = distribution;
- }
-
- public String getDateTag() {
- return DateTag;
- }
-
- public void setDateTag(String dateTag) {
- DateTag = dateTag;
- }
}
diff --git a/modulesPublic/common/src/main/res/drawable/endpoint.png b/modulesPublic/common/src/main/res/drawable/endpoint.png
new file mode 100644
index 0000000..9ece8f0
Binary files /dev/null and b/modulesPublic/common/src/main/res/drawable/endpoint.png differ
diff --git a/modulesPublic/common/src/main/res/drawable/startpoint.png b/modulesPublic/common/src/main/res/drawable/startpoint.png
new file mode 100644
index 0000000..cecbf51
Binary files /dev/null and b/modulesPublic/common/src/main/res/drawable/startpoint.png differ