[8.0.2]规划与决策功能的UI效果进行调整

This commit is contained in:
chenfufeng
2025-06-13 17:11:18 +08:00
parent d1af40b2c7
commit abb4ed3299
7 changed files with 76 additions and 67 deletions

View File

@@ -54,7 +54,7 @@ class HomeViewModel : ViewModel(), BridgeListener, OrderListener {
checkScreenChange()
}
fun checkScreenChange(){
private fun checkScreenChange(){
CallerLogger.d(TAG,"havePredictionInfos:${havePredictionInfos}--haveTrajectoryInfos:${haveTrajectoryInfos}--order:${order}")
if(order!=null&&havePredictionInfos&&havePredictionInfos){
FunctionBuildConfig.isDrawDecIdentifyData = true

View File

@@ -119,15 +119,15 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber,
PredictionDataManager.getInstance()?.updateData(carPoiList1!!, 0)
PredictionDataManager.getInstance()?.updateData(carPoiList2!!, 2)
} else {
if (preObj.predictionTrajectoryList.isNullOrEmpty() || isUnKnownType(preObj.classtype) || mogoMap == null) return@forEach
if (isUnKnownType(preObj.classtype) || preObj.predictionTrajectoryList.isNullOrEmpty() || mogoMap == null) return@forEach
point = preObj.predictionTrajectoryList[0].trajectoryPointsList[0]
arr = mogoMap.switchData(point.x, point.y, false)
arr?.let { lonLatArr ->
val distance = com.mogo.eagle.core.utilcode.util.LocationUtils.getDistance(getWgs84Lat(), getWgs84Lon(), lonLatArr[1], lonLatArr[0])
if (distance > 30) return@forEach
if (distance > 28) return@forEach
}
preObj.predictionTrajectoryList[0].trajectoryPointsList.forEachIndexed { index, point ->
if (index > 9 && index % 2 == 0) {// 步长为2减少点
if (index in 0..44 && index % 2 == 0) {// 步长为2减少点
arr = mogoMap.switchData(point.x, point.y, false)
arr?.let { lonLatArr ->
points.add(MogoLatLng(lonLatArr[1], lonLatArr[0]))
@@ -146,9 +146,17 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber,
}
private fun isUnKnownType(classType: Int): Boolean {
val type: TrackedObjectType = TrackedObjectType.forNumber(classType) ?: return true
var classID: TrackedObjectClassID? = typeMap[type] ?: return true
return false
val type: TrackedObjectType? = TrackedObjectType.forNumber(classType)
return when (type) {
null, TrackedObjectType.TYPE_UNKNOWN, TrackedObjectType.TYPE_UNKNOWN_SMALL,
TrackedObjectType.TYPE_UNKNOWN_BIG, TrackedObjectType.TYPE_UNKNOWN_STATIC,
TrackedObjectType.TYPE_UNKNOWN_DYNAMIC, TrackedObjectType.UNRECOGNIZED -> {
true
}
else -> {
false
}
}
}
fun renderAiCloudResult(cloudData: List<SocketDownData.CloudRoadDataProto>, mapInstance:String = MogoMap.DEFAULT) {

View File

@@ -80,11 +80,12 @@ class PredictionDataManager private constructor() {
val lonLatList = ArrayList<android.graphics.Point>()
var arr: DoubleArray?
var point: android.graphics.Point?
list.forEach {
arr = mogoMap.switchData(it.x, it.y, false)// UTM转wgs84
if (arr == null || arr!!.size < 2) return@forEach
list.forEachIndexed { index, poi ->
if (index > 45) return@forEachIndexed
arr = mogoMap.switchData(poi.x, poi.y, false)// UTM转wgs84
if (arr == null || arr!!.size < 2) return@forEachIndexed
point = mogoMap.toScreenLocation(arr!![0], arr!![1])// wgs84转屏幕坐标
if (point == null) return@forEach
if (point == null) return@forEachIndexed
lonLatList.add(point!!)
Log.d(TAG, "预测数据的屏幕坐标为:(${point!!.x},${point!!.y})")
}

View File

@@ -13,6 +13,7 @@ import android.util.AttributeSet
import android.util.Log
import android.view.SurfaceHolder
import android.view.SurfaceView
import android.view.View
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
import com.mogo.eagle.core.function.map.R
@@ -57,13 +58,15 @@ class CoordinateAnimationView @JvmOverloads constructor(
@Volatile
private var isRunning = false
@Volatile
private var isVisible = false
private var bezierPath: Path? = null // 贝塞尔曲线路径
private var curvePaint: Paint? = null
private var carPaint: Paint? = null
// private var circlePaint: Paint? = null
private var visibleRect: RectF? = null // 可见区域
private var strokeWidth = 22f
private var strokeWidth = 16f
private var carBitmap: Bitmap? = null
@@ -155,8 +158,8 @@ class CoordinateAnimationView @JvmOverloads constructor(
private fun getOriginBitmap(resId: Int, desWidth: Int, desHeight: Int): Bitmap {
val bitmap = BitmapFactory.decodeResource(resources, resId)
val scaleWidth = (bitmap.width * 1.6).toInt()
val scaleHeight = (bitmap.height * 1.6).toInt()
val scaleWidth = (bitmap.width * 2)
val scaleHeight = (bitmap.height * 2)
Log.d(TAG, "$index-Bitmap width:$scaleWidth,height:$scaleHeight")
return Bitmap.createScaledBitmap(
bitmap, scaleWidth,
@@ -177,6 +180,10 @@ class CoordinateAnimationView @JvmOverloads constructor(
// return BitmapFactory.decodeResource(resources, resId, options)
}
fun setVisible(isVisible: Boolean) {
this.isVisible = isVisible
}
override fun surfaceCreated(holder: SurfaceHolder) {
animationThread = AnimationThread()
animationThread!!.start()
@@ -209,6 +216,14 @@ class CoordinateAnimationView @JvmOverloads constructor(
controlPoints = null
}
override fun onVisibilityChanged(changedView: View, visibility: Int) {
super.onVisibilityChanged(changedView, visibility)
val name = changedView.javaClass.simpleName
if (name == TAG || name == "ConstraintLayout") {
isVisible = visibility == View.VISIBLE
}
}
override fun screenPointsChanged(data: FloatArray, index: Int) {
if (index == this.index) {
updatePoints(data)
@@ -664,21 +679,23 @@ class CoordinateAnimationView @JvmOverloads constructor(
lastUpdateTime = System.currentTimeMillis()
while (isRunning) {
canvas = null
try {
canvas = surfaceHolder!!.lockCanvas()
synchronized(surfaceHolder!!) {
// 绘制
Log.d(TAG, "$index-准备绘制!")
// 清屏
canvas?.drawColor(Color.rgb(231, 235, 238))
drawMovingDashedPath(canvas)
drawPath(canvas)
drawCar(canvas)
}
} finally {
if (canvas != null) {
surfaceHolder!!.unlockCanvasAndPost(canvas)
if (isVisible) {
canvas = null
try {
canvas = surfaceHolder!!.lockCanvas()
synchronized(surfaceHolder!!) {
// 绘制
Log.d(TAG, "$index-准备绘制!")
// 清屏
canvas?.drawColor(Color.rgb(231, 235, 238))
drawMovingDashedPath(canvas)
drawPath(canvas)
drawCar(canvas)
}
} finally {
if (canvas != null) {
surfaceHolder!!.unlockCanvasAndPost(canvas)
}
}
}

View File

@@ -6,30 +6,6 @@
android:layout_height="match_parent"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<!-- <androidx.cardview.widget.CardView-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- app:cardBackgroundColor="#D7F1FF"-->
<!-- app:cardCornerRadius="20dp"-->
<!-- app:cardElevation="0dp"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent">-->
<!-- <com.mogo.eagle.core.function.view.PredictionMapView-->
<!-- android:id="@+id/preDetailView"-->
<!-- android:layout_width="756dp"-->
<!-- android:layout_height="500dp"-->
<!-- android:layout_gravity="center_horizontal|bottom"-->
<!-- android:layout_marginBottom="26dp"-->
<!-- app:carPosition="6"-->
<!-- app:isAutoLocation="false"-->
<!-- app:isDisplayAnim="false"-->
<!-- app:isWeatherEnable="false"-->
<!-- app:styleMode="MAP_STYLE_DAY_VR_AIP"-->
<!-- app:vrAngleMode="MAP_STYLE_VR_ANGLE_TOP" />-->
<!-- </androidx.cardview.widget.CardView>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -236,7 +236,7 @@ object FunctionBuildConfig {
*/
@Volatile
@JvmField
var isDrawPreIdentifyData = true
var isDrawPreIdentifyData = false
/**
* 地图是否绘制决策数据的Marker

View File

@@ -23,6 +23,7 @@ import com.zhidaoauto.map.sdk.open.view.MapAutoView;
import com.zhjt.mogo.adas.data.Adas;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -38,18 +39,21 @@ import prediction2025.Prediction2025;
*/
public class ObjectUtils {
// private static Map<Adas.TrackedObjectType, Adas.TrackedObjectClassID> sTypeMap = Map.of(//最低得JDK9注意换成new HashMap<>
// Adas.TrackedObjectType.TYPE_PEDESTRIAN, Adas.TrackedObjectClassID.Person,
// Adas.TrackedObjectType.TYPE_MOTOR, Adas.TrackedObjectClassID.MotorCycle,
// Adas.TrackedObjectType.TYPE_BICYCLE, Adas.TrackedObjectClassID.Bicycle,
// Adas.TrackedObjectType.TYPE_CAR, Adas.TrackedObjectClassID.Car,
// Adas.TrackedObjectType.TYPE_TRUCK, Adas.TrackedObjectClassID.Truck,
// Adas.TrackedObjectType.TYPE_BUS, Adas.TrackedObjectClassID.Bus,
// Adas.TrackedObjectType.TYPE_WARNINGTRIANGLE, Adas.TrackedObjectClassID.WarningTriangle,
// Adas.TrackedObjectType.TYPE_ROADWORK_OCCUPY_0501, Adas.TrackedObjectClassID.RoadWork_occupy_0501,
// Adas.TrackedObjectType.TYPE_ROADWORK_BREAK_0502, Adas.TrackedObjectClassID.RoadWork_break_0502,
// Adas.TrackedObjectType.TYPE_ROAD_CONGESTION, Adas.TrackedObjectClassID.ROAD_CONGESTION
// );
private static final Map<Adas.TrackedObjectType, Adas.TrackedObjectClassID> sTypeMap = new HashMap<>();
static {
// 初始化类型映射
sTypeMap.put(Adas.TrackedObjectType.TYPE_PEDESTRIAN, Adas.TrackedObjectClassID.Person);
sTypeMap.put(Adas.TrackedObjectType.TYPE_MOTOR, Adas.TrackedObjectClassID.MotorCycle);
sTypeMap.put(Adas.TrackedObjectType.TYPE_BICYCLE, Adas.TrackedObjectClassID.Bicycle);
sTypeMap.put(Adas.TrackedObjectType.TYPE_CAR, Adas.TrackedObjectClassID.Car);
sTypeMap.put(Adas.TrackedObjectType.TYPE_TRUCK, Adas.TrackedObjectClassID.Truck);
sTypeMap.put(Adas.TrackedObjectType.TYPE_BUS, Adas.TrackedObjectClassID.Bus);
sTypeMap.put(Adas.TrackedObjectType.TYPE_WARNINGTRIANGLE, Adas.TrackedObjectClassID.WarningTriangle);
sTypeMap.put(Adas.TrackedObjectType.TYPE_ROADWORK_OCCUPY_0501, Adas.TrackedObjectClassID.RoadWork_occupy_0501);
sTypeMap.put(Adas.TrackedObjectType.TYPE_ROADWORK_BREAK_0502, Adas.TrackedObjectClassID.RoadWork_break_0502);
sTypeMap.put(Adas.TrackedObjectType.TYPE_ROAD_CONGESTION, Adas.TrackedObjectClassID.ROAD_CONGESTION);
}
public static MarkerOptions fromMogo(Point.Options opt, MapAutoView mapAutoView) {
@@ -226,7 +230,10 @@ public class ObjectUtils {
if (type == null) {
type = Adas.TrackedObjectType.TYPE_UNKNOWN;
}
Adas.TrackedObjectClassID classID = Adas.TrackedObjectClassID.Unknown;
Adas.TrackedObjectClassID classID = sTypeMap.get(type);
if (classID == null) {
classID = Adas.TrackedObjectClassID.Unknown;
}
return classID.getNumber();
}