From a889e603481b5f3f6cf0074af1f25f94b571db8c Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期二, 21 一月 2020 15:01:46 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge --- app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java | 233 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 140 insertions(+), 93 deletions(-) diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java index 8f30081..559f021 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java @@ -6,8 +6,8 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; -import android.opengl.GLSurfaceView; import android.os.Bundle; +import android.os.Handler; import android.util.Log; import android.view.LayoutInflater; import android.view.SurfaceHolder; @@ -15,7 +15,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -32,6 +31,9 @@ import java.lang.reflect.Type; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; @@ -52,6 +54,36 @@ */ public class MapFragment extends SupportFragment { private boolean isDrawing = false; + private ICEventListener rtcmicEventListener = new ICEventListener() { + @Override + public void onCEvent(String topic, int msgCode, int resultCode, final Object obj) { + if (msgCode == Constant.DEBUG_RTCM){ + + CThreadPoolExecutor.runOnMainThread(new Runnable() { + @Override + public void run() { + Log.i(TAG, "title="+(String)obj); + toolbar.setTitle((String)obj); + } + }); + } + } + }; + private ICEventListener debugTxticEventListener = new ICEventListener() { + @Override + public void onCEvent(String topic, int msgCode, int resultCode, final Object obj) { + if (msgCode == Constant.DEBUG_TXT){ + CThreadPoolExecutor.runOnMainThread(new Runnable() { + @Override + public void run() { + Log.i(TAG, "subtitle="+(String)obj); + toolbar.setSubtitle((String)obj); + } + }); + + } + } + }; public static SupportFragment newInstance() { return new MapFragment(); @@ -80,6 +112,9 @@ , {9.278, -1.5330000000000004}, {9.277999999999999, 1.467000000000001}}; Gson gson; private LinearLayout linearLayout;//surfaceview鐨勭埗瀹瑰櫒锛屼负浜嗙Щ鍔╯urfaceview鑰屼娇鐢紝鍥犱负scrollto涓嶈兘绉诲姩view锛� + private LinkedBlockingQueue queue = new LinkedBlockingQueue(100); + private ExecutorService producer = Executors.newSingleThreadExecutor(); + private ExecutorService consumer = Executors.newSingleThreadExecutor(); @Nullable @@ -88,6 +123,7 @@ View view = inflater.inflate(R.layout.layout_mapfragment, container, false); gson = new Gson(); initView(view); + consumer.execute(new CalRunnable()); return view; } @@ -282,12 +318,12 @@ pathText.lineTo(700, 30); canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� } - if (osd3 != null) { - Path pathText = new Path(); - pathText.moveTo(10, 240); - pathText.lineTo(700, 130); - canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� - } +// if (osd3 != null) { +// Path pathText = new Path(); +// pathText.moveTo(10, 240); +// pathText.lineTo(700, 130); +// canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴� +// } // 鎻愪氦鐢诲竷 Canvas canvas = holder.lockCanvas(); @@ -329,83 +365,83 @@ int line = 0; int map_line = 0; private StringBuffer stringBuffer = new StringBuffer(); + class MessageRemoteService{ + public int msgCode; + public String json; + + public MessageRemoteService(int msgCode, Object obj) { + this.json = (String) obj; + this.msgCode = msgCode; + } + } private ICEventListener icEventListener = new ICEventListener() { @Override - public void onCEvent(String topic, int msgCode, int resultCode, Object obj) { + public void onCEvent(String topic, final int msgCode, int resultCode, final Object obj) { - CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj)); + + producer.execute(new Runnable() { + @Override + public void run() { + queue.offer(new MessageRemoteService(msgCode,obj)); + } + }); + } }; + boolean flag = true; class CalRunnable implements Runnable{ private String json; private int cmd; - public CalRunnable(int cmd,String obj) { - this.json = obj; - this.cmd = cmd; - } @Override public void run() { - MyLog.i(TAG, json); - if (!(cmd == Constant.REAL_TIME_CAR_POS)){ - if (cmd == Constant.DEBUG_RTCM){ - stringBuffer.append("\tRTCM:"); + while (flag){ + MessageRemoteService messageRemoteService = (MessageRemoteService) queue.peek(); + if (messageRemoteService == null){ try { - JSONObject jsonObject = new JSONObject(json); - int length = jsonObject.getInt("length"); - stringBuffer.append(length); - } catch (JSONException e) { + Thread.sleep(100); + } catch (InterruptedException e) { e.printStackTrace(); } } - if (cmd == Constant.DEBUG_TXT){ - try { - JSONObject jsonObject = new JSONObject(json); - String info = jsonObject.getString("info"); - stringBuffer.append("\tinfo:"); - stringBuffer.append(info); - } catch (JSONException e) { - e.printStackTrace(); + messageRemoteService = (MessageRemoteService) queue.poll(); + if (messageRemoteService != null){ + this.cmd = messageRemoteService.msgCode; + this.json = messageRemoteService.json; + MyLog.i(TAG, json); + + + RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class); + List<Double> points = timeCarPos.getPoint(); + switch (timeCarPos.getMove()){ + case 0: + osd2 = "鍋滆溅"; + break; + case 1: + osd2 = "鍓嶈繘"; + break; + case -1: + osd2 = "鍚庨��"; + break; } + osd="鏂瑰悜瑙�"+String.valueOf(timeCarPos.getHeading()); + line = 0; + map_line = 0; - } - } - osd3 = stringBuffer.toString(); - if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){ + for (int i = 0; i < points.size(); i++) { + if ((i % 2) == 0) { + car[line][0] = points.get(i); + } else { + double value = 0 - points.get(i); + Log.i(TAG, "onCEvent: 鏂板��=" + value + " 浣嶇疆锛�" + i); + car[line][1] = value; + line++; + } - stringBuffer.delete(0,stringBuffer.length()); - } - RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class); - List<Double> points = timeCarPos.getPoint(); - switch (timeCarPos.getMove()){ - case 0: - osd2 = "鍋滆溅"; - break; - case 1: - osd2 = "鍓嶈繘"; - break; - case -1: - osd2 = "鍚庨��"; - break; - } - osd="鏂瑰悜瑙�"+String.valueOf(timeCarPos.getHeading()); - line = 0; - map_line = 0; - - for (int i = 0; i < points.size(); i++) { - if ((i % 2) == 0) { - car[line][0] = points.get(i); - } else { - double value = 0 - points.get(i); - Log.i(TAG, "onCEvent: 鏂板��=" + value + " 浣嶇疆锛�" + i); - car[line][1] = value; - line++; - } - - } - map_id = timeCarPos.getMap_id(); + } + map_id = timeCarPos.getMap_id(); // 1 - 鍊掑簱 // 2 - 鍧¤捣 // 3 - 渚ф柟鍋滆溅 @@ -413,56 +449,67 @@ // 5 - 鐩磋杞集 - StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP); - Type type = new TypeToken<List<ExamMap>>(){}.getType(); - if (buffer != null){ - List<ExamMap> examMaps = gson.fromJson(buffer.toString().trim(), type); + StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP); + Type type = new TypeToken<List<ExamMap>>(){}.getType(); + if (buffer != null){ + List<ExamMap> 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 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(i).getXy(); - if(j==0){ - map = new double[xys.size()/2][2]; - }else{ - MyLog.i(TAG,"鏆傛椂杩樹笉鏀寔鏇茬嚎"); + for(int j=0; j<pointBeanList.size();j++){ + List<Double> xys = pointBeanList.get(i).getXy(); + if(j==0){ + map = new double[xys.size()/2][2]; + }else{ + MyLog.i(TAG,"鏆傛椂杩樹笉鏀寔鏇茬嚎"); + break; + } + + for (int k=0; k<xys.size();k++){ + if ((k % 2) == 0) { + map[map_line][0] = xys.get(k); + } else { + double value = 0 - xys.get(k); + Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + i); + map[map_line][1] = value; + map_line++; + } + } + + } break; } - - for (int k=0; k<xys.size();k++){ - if ((k % 2) == 0) { - map[map_line][0] = xys.get(k); - } else { - double value = 0 - xys.get(k); - Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + i); - map[map_line][1] = value; - map_line++; - } - } - } - break; } + DrawMap(map,car); } + } - DrawMap(map,car); + } } @Override public void onAttach(Context context) { super.onAttach(context); CEventCenter.onBindEvent(true, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC); + CEventCenter.onBindEvent(true, rtcmicEventListener, Constant.BIND_RTCM_TOPIC); + CEventCenter.onBindEvent(true, debugTxticEventListener, Constant.BIND_DEBUG_TXT); } @Override public void onDetach() { super.onDetach(); + flag = false; + producer.shutdown(); + consumer.shutdown(); CEventCenter.onBindEvent(false, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC); + CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_RTCM_TOPIC); + CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_DEBUG_TXT); } } -- Gitblit v1.8.0