From ac5139566be8957be2f885b64850c09d35bebb38 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期三, 18 三月 2020 10:58:46 +0800
Subject: [PATCH] 增加路考绘图;两个点推出第三个点;增加路考地图对应的json类
---
app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragment.java | 201 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 195 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragment.java
index dc1cafc..0843923 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/RoadDriveMapFragment.java
@@ -1,5 +1,6 @@
package safeluck.drive.evaluation.fragment;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
@@ -15,10 +16,20 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.anyun.exam.lib.MyLog;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
+import safeluck.drive.evaluation.bean.ExamMap;
+import safeluck.drive.evaluation.util.FileUtil;
public class RoadDriveMapFragment extends SupportFragment implements SurfaceHolder.Callback {
@@ -28,12 +39,17 @@
private SurfaceHolder mSurfaceHolder;
private boolean flag = false;//鎺у埗缁樺埗绾跨▼drawThread
private Canvas mCanvas;
+ private Canvas bitMapCanvas;
private Paint mPaint;
private Path mPath;
+ private StringBuffer buffer;//瀛樻斁鍦板浘鐨刡uffer
+ private Gson gson = new Gson();
private int avaliableWidth,avaliableHeight;
private int x = 50, y = 50, r = 10; // 鍦嗙殑鍧愭爣鍜屽崐寰�
+ private int sinx = 0,siny =0 ;
+ float [] pts={50,100,100,200,200,300,300,400};
private ExecutorService generateData = Executors.newSingleThreadExecutor();//浜х敓鏁版嵁锛堜富瑕佹槸杞﹁締鏁版嵁锛�
private ExecutorService drawThread = Executors.newSingleThreadExecutor();//缁樺埗绾跨▼
@@ -55,13 +71,38 @@
avaliableWidth = mSurfaceView.getWidth();
Log.i(TAG,"鍙敤瀹藉害="+avaliableWidth+"鍙敤楂樺害="+avaliableHeight);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeWidth(1.5f);
mPath = new Path();
+ int widhtpixels =getResources().getDisplayMetrics().widthPixels;
+ int heightpixels =getResources().getDisplayMetrics().heightPixels;
+ Log.i(TAG,"widhtpixels="+widhtpixels+" heig="+heightpixels);
return mSurfaceView;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
+// mCanvas = holder.lockCanvas();
+// int screen_width = mCanvas.getWidth();
+// int screen_height = mCanvas.getHeight();
+// Bitmap bmp = Bitmap.createBitmap(screen_width, screen_height, Bitmap.Config.ARGB_8888);
+// bitMapCanvas = new Canvas(bmp);
+// bitMapCanvas.drawColor(Color.WHITE);
+//
+// mPaint = new Paint();
+//
+// mPaint.setTextSize(30);
+// mPaint.setColor(Color.BLACK);
+// mPaint.setStrokeWidth(1.5f);
+// mPaint.setAntiAlias(true);
+// mPaint.setStyle(Paint.Style.STROKE);
+//
+// mCanvas.drawBitmap(bmp,0,0,mPaint);
+// holder.unlockCanvasAndPost(mCanvas);
+
+
+ flag = true;
drawThread.execute(new DrawRunnable());
}
@@ -76,15 +117,161 @@
flag = false;
}
-
+ List<ExamMap> examMaps = new ArrayList<>();
/**
* 涓昏鏄繖涓柟娉曪紝杩涜鍧愭爣鐐硅绠楋紝浣跨敤mPath鐢诲浘锛屽彲鑳借鐢ㄥ埌Canvas
* 鏈�濂藉彧浣跨敤path
*/
private void calculate() {
- mPath.addCircle(x,y,r, Path.Direction.CCW);
+ int map_id = 863;
+ int map_line = 0;
+ double map[][]={};
+
+ if (buffer == null){
+
+ buffer = FileUtil.readAssetTxtFile(_mActivity, Constant.ROAD_MAP);
+ Log.i(TAG,"ditu="+buffer.toString().trim());
+ }
+ Type type = new TypeToken<List<ExamMap>>(){}.getType();
+ if (buffer != null){
+ examMaps= gson.fromJson(buffer.toString().trim(), type);
+ }
+
+ for (int i = 0; i < examMaps.size(); i++) {
+ ExamMap examMap = examMaps.get(i);
+ if (map_id == examMap.getId()){
+ List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
+
+ for(int j=0; j<pointBeanList.size();j++){
+ List<Double> xys = pointBeanList.get(j).getXy();
+ if(j==0){
+ map = new double[xys.size()/2][2];
+
+
+
+ for (int k=0; k<xys.size();k++){
+ if ((k % 2) == 0) {
+ map[map_line][0] = xys.get(k);
+ Log.i(TAG, "onCEvent: map鏂板��=" + map[map_line][0] + " 浣嶇疆锛�" + k);
+ } else {
+ double value = 0-xys.get(k);
+
+
+ map[map_line][1] = value;
+ map_line++;
+ }
+ }
+ }else{
+ MyLog.i(TAG,"鏆傛椂鏀寔鏇茬嚎");
+ break;
+ }
+
+
+
+ }
+ break;
+ }
+ }
+ onDrawMap(map);
+// mPaint.reset();
+// mPaint.setStyle(Paint.Style.FILL);
+// mPaint.setColor(Color.RED);
+// mPath.addCircle(x,y,r, Path.Direction.CCW);
+//
+// mCanvas.drawPath(mPath,mPaint);
+//
+//
+// mPaint.reset();
+// mPaint.setStyle(Paint.Style.FILL);
+// mPaint.setColor(Color.GREEN);
+// mCanvas.drawCircle(x+100,y+100,70,mPaint);
+//
+//
+// mPaint.reset();
+// mPath = new Path();
+// mPaint.setColor(Color.GREEN);
+// mPaint.setStyle(Paint.Style.STROKE);
+// mPaint.setStrokeWidth(1.5f);
+//
+// mPath.moveTo(pts[0],pts[1]);
+// mPath.lineTo(pts[2],pts[3]);
+// mCanvas.drawPath(mPath,mPaint);
+
+
+
+ if (mCanvas != null){
+ //閲婃斁canvas瀵硅薄骞舵彁浜ょ敾甯�
+ mSurfaceHolder.unlockCanvasAndPost(mCanvas);
+ }
+
}
+
+
+private void onDrawMap(final double map[][]){
+ double base_x = 300, base_y = 20;
+ double max_x = 0, min_x = 0, max_y = 0, min_y = 0;
+
+ Log.d(TAG, "DrawMap map size " + map.length + " car size " );
+
+ for (int i = 0; i < map.length; i++) {
+ if (i == 0) {
+ max_x = map[0][0];
+ min_x = map[0][0];
+ max_y = map[0][1];
+ min_y = map[0][1];
+ } else {
+ if (max_x < map[i][0]) {
+ max_x = map[i][0];
+ }
+ if (min_x > map[i][0]) {
+ min_x = map[i][0];
+ }
+ if (max_y < map[i][1]) {
+ max_y = map[i][1];
+ }
+ if (min_y > map[i][1]) {
+ min_y = map[i][1];
+ }
+ }
+ }
+ long scale_x = Math.round((mCanvas.getWidth() - base_x - 10) / (max_x - min_x));
+ long scale_y = Math.round((mCanvas.getHeight() - base_y - 10) / (max_y - min_y));
+
+ if (scale_x >= scale_y) {
+ scale_x = scale_y;
+ } else {
+ scale_y = scale_x;
+ }
+
+ mPaint.reset();
+ mPaint.setAntiAlias(true);
+ mPaint.setColor(Color.BLACK);
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeWidth(1.5f);
+
+
+
+ if (map.length > 9) {
+ Log.d(TAG, "DrawMap X = " + String.format("%f", (float) (base_x + (map[0][0] - min_x) * scale_x)) + " Y = " + String.format("%f", (float) (base_y + (map[0][1] - min_y) * scale_y)));
+ mPath.moveTo((float) (base_x + (map[0][0] - min_x) * scale_x), (float) (base_y + (map[0][1] - min_y) * scale_y));
+ for (int i = 1; i < map.length; i++) {
+ Log.d(TAG, "DrawMap to X = " + (float) (base_x + (map[i][0] - min_x) * scale_x) + " Y = " + (float) (base_y + (map[i][1] - min_y) * scale_y));
+ mPath.lineTo((float) (base_x + (map[i][0] - min_x) * scale_x), (float) (base_y + (map[i][1] - min_y) * scale_y));
+ }
+ mPath.close();
+ mCanvas.drawPath(mPath,mPaint);
+ }
+mPaint.reset();
+ mPath = new Path();
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeWidth(1.5f);
+ mPaint.setColor(Color.RED);
+ mPath.moveTo(300,150);
+ mPath.lineTo(1015,150);
+
+ mCanvas.drawPath(mPath,mPaint);
+}
/**
* 缁樺埗
@@ -95,15 +282,17 @@
mCanvas = mSurfaceHolder.lockCanvas();
//缁樺埗鑳屾櫙
mCanvas.drawColor(Color.WHITE);
+ Log.i(TAG,"width="+mCanvas.getWidth()+"height:"+mCanvas.getHeight());
//缁樺埗璺緞
mCanvas.drawPath(mPath, mPaint);
}catch (Exception e){
}finally {
- if (mCanvas != null){
- //閲婃斁canvas瀵硅薄骞舵彁浜ょ敾甯�
- mSurfaceHolder.unlockCanvasAndPost(mCanvas);
- }
+// if (mCanvas != null){
+// mCanvas.restore();
+// //閲婃斁canvas瀵硅薄骞舵彁浜ょ敾甯�
+// mSurfaceHolder.unlockCanvasAndPost(mCanvas);
+// }
}
}
--
Gitblit v1.8.0