diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java index dcb0653d37..24f85ba237 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java @@ -95,6 +95,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic Logger.d(TAG, "%s - %s", descriptor, isTrue); mChangeCarModeStatus = true; sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches); + removeUselessMarker(mMarkersCaches); mMarkersCaches = new ConcurrentHashMap<>(); mLastPositions.clear(); AdasRecognizedResultDrawer.getInstance().notifyVrModeChanged(); //清除ADAS old marker data @@ -170,7 +171,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic IMogoMarker marker = mMarkersCaches.remove(uniqueKey); if (marker != null && !marker.isDestroyed()) { updateCacheMarkerRes(marker, cloudRoadData); - renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches); + renderSnapshotOneFrame(true, marker, uniqueKey, cloudRoadData, newMarkersCaches); } else { newDiffSet.add(cloudRoadData); } @@ -179,50 +180,51 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic removeUselessLastRecord(); // 能复用的 marker 数量 - int cachedMarkerSize = mMarkersCaches.size(); +// int cachedMarkerSize = mMarkersCaches.size(); // 需要新增的 marker 数量 int newDiffSetSize = newDiffSet.size(); // 能复用的数量 - int size = Math.min(cachedMarkerSize, newDiffSetSize); +// int size = Math.min(cachedMarkerSize, newDiffSetSize); // 复用过期 marker if (newDiffSetSize > 0) { - Iterator> entryIterator = mMarkersCaches.entrySet().iterator(); - for (int i = 0; i < size; i++) { - SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i); - String uniqueKey = cloudRoadData.getUuid(); - Map.Entry entry = entryIterator.next(); - entryIterator.remove(); - SocketDownData.CloudRoadDataProto old = mLastPositions.remove(entry.getKey()); - IMogoMarker marker = entry.getValue(); - if (marker == null) { - continue; - } - - // 更新资源内容 - if (old == null || old.getType() != cloudRoadData.getType()) { - updateCacheMarkerRes(marker, cloudRoadData); - } - renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches); - } +// Iterator> entryIterator = mMarkersCaches.entrySet().iterator(); +// for (int i = 0; i < size; i++) { +// SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i); +// String uniqueKey = cloudRoadData.getUuid(); +// Map.Entry entry = entryIterator.next(); +// entryIterator.remove(); +// SocketDownData.CloudRoadDataProto old = mLastPositions.remove(entry.getKey()); +// IMogoMarker marker = entry.getValue(); +// if (marker == null) { +// continue; +// } +// +// // 更新资源内容 +// if (old == null || old.getType() != cloudRoadData.getType()) { +// updateCacheMarkerRes(marker, cloudRoadData); +// } +// renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches); +// } // 复用过后还需新增的 marker - for (int i = size; i < newDiffSetSize; i++) { + for (int i = 0; i < newDiffSetSize; i++) { SocketDownData.CloudRoadDataProto cloudRoadData = newDiffSet.get(i); String uniqueKey = cloudRoadData.getUuid(); IMogoMarker marker = drawSnapshotDataMarker(cloudRoadData); if (marker == null) { continue; } - renderSnapshotOneFrame(marker, uniqueKey, cloudRoadData, newMarkersCaches); + renderSnapshotOneFrame(false, marker, uniqueKey, cloudRoadData, newMarkersCaches); } } - if (cachedMarkerSize - size > 0) { - sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches); - } +// if (cachedMarkerSize - size > 0) { +// sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches); +// } sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches); + mMarkersCaches.clear(); mMarkersCaches = newMarkersCaches; } @@ -291,7 +293,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic * @param cloudRoadData {@link SocketDownData.CloudRoadDataProto} * @param newSnapshotCaches 缓存数据 */ - private void renderSnapshotOneFrame(IMogoMarker marker, String uniqueKey, SocketDownData.CloudRoadDataProto cloudRoadData, Map newSnapshotCaches) { + private void renderSnapshotOneFrame(boolean useCache, IMogoMarker marker, String uniqueKey, SocketDownData.CloudRoadDataProto cloudRoadData, Map newSnapshotCaches) { Logger.d(TAG, "renderSnapshotOneFrame"); final long start = System.currentTimeMillis(); @@ -315,8 +317,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic mLastPositions.put(uniqueKey, cloudRoadData); - newSnapshotCaches.put(uniqueKey, marker); - if (lastPosition != null) { + if (useCache) { long interval = computeAnimDuration(lastPosition.getSystemTime(), cloudRoadData.getSystemTime(), lastPosition.getSatelliteTime(), cloudRoadData.getSatelliteTime()); final MogoLatLng point = new MogoLatLng(cloudRoadData.getWgslat(), cloudRoadData.getWgslon()); @@ -327,6 +328,9 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic marker.setRotateAngle(((float) cloudRoadData.getHeading())); marker.setPosition(cloudRoadData.getWgslat(), cloudRoadData.getWgslon()); } + + newSnapshotCaches.put(uniqueKey, marker); + marker.setAnchorColor(getModelRenderColor(cloudRoadData.getType(), cloudRoadData.getFromType(), cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading())); if (shouldShowSpeed(cloudRoadData.getType())) { showSelfSpeed(marker, cloudRoadData.getSpeed(), cloudRoadData.getUuid(), cloudRoadData.getType(), MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode());