diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt index e7dd0ced45..703fcd4f6f 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.datacenter.v2x import android.content.Context import android.os.CountDownTimer import android.os.Handler +import android.util.Log import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightResult import com.mogo.eagle.core.data.biz.trafficlight.TrafficLightStatus import com.mogo.eagle.core.data.biz.trafficlight.currentRoadTrafficLight @@ -241,7 +242,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight "${SceneConstant.M_D_C}${TAG}", "resetTrafficLight ------> isReset = $isReset ---hasObuLightStatus = $hasObuLightStatus" ) - if (!hasObuLightStatus && !hasAutopilotPerception) { + if (!hasObuLightStatus && !hasAutopilotPerception && !hasFusionLightStatus) { if (isReset) { hide("云端重置红绿灯数据", DataSourceType.AICLOUD) } @@ -259,6 +260,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight if (filterTelematicUnion(sourceType)) { return } + Log.i("xuxinchao","hide msg="+msg+" sourceType="+sourceType) CallerTrafficLightListenerManager.disableTrafficLight() } @@ -282,6 +284,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight if (filterTelematicUnion(lightSource)) { return } + if(currentState == TrafficLightEnum.BLACK || nextState == TrafficLightEnum.BLACK + || nextTwoState == TrafficLightEnum.BLACK){ + return + } hasObuLightStatus = false hasAutopilotPerception = false hasAiLightStatus = false diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt index 265102b2b7..bb913983ad 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt @@ -2,15 +2,22 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.enums.TrafficLightEnum import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightNum +import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightPointer +import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightProportion +import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightScale +import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightState /** * 融合红绿灯View @@ -44,6 +51,7 @@ class FusionTrafficLightView @JvmOverloads constructor( */ override fun disableTrafficLight() { super.disableTrafficLight() + Log.i("xuxinchao","disableTrafficLight 关闭红绿灯预警展示") UiThreadHandler.post{ mCurrentLightId = TrafficLightEnum.BLACK this@FusionTrafficLightView.visibility = GONE @@ -72,9 +80,68 @@ class FusionTrafficLightView @JvmOverloads constructor( if(this@FusionTrafficLightView.visibility == View.GONE){ this@FusionTrafficLightView.visibility = View.VISIBLE //首次展示,需要将当前、下一、下二灯态的时间占比绘制出来,只绘制一次 - + val proportionList = ArrayList() + //按照绿、黄、红的顺序将灯态时间添加到数组 + when (currentState) { + TrafficLightEnum.GREEN -> { + proportionList.add(0,currentDuration) + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,currentDuration) + } + else -> { + proportionList.add(2,currentDuration) + } + } + when(nextState){ + TrafficLightEnum.GREEN -> { + proportionList.add(0,nextDuration) + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,nextDuration) + } + else -> { + proportionList.add(2,nextDuration) + } + } + when(nextTwoState){ + TrafficLightEnum.GREEN -> { + proportionList.add(0,nextTwoDuration) + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,nextTwoDuration) + } + else -> { + proportionList.add(2,nextTwoDuration) + } + } + fusionTrafficLightProportion.updateProportion(proportionList) } - + //根据当前灯态设置转盘、刻度、指针背景 + when(currentState){ + TrafficLightEnum.GREEN -> { + fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green)) + fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_scale)) + fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_pointer)) + } + TrafficLightEnum.YELLOW -> { + fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow)) + fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_scale)) + fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_pointer)) + } + else -> { + fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red)) + fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_scale)) + fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_pointer)) + } + } + //更新当前灯态倒计时时间 + if(currentDuration>0){ + fusionTrafficLightNum.text = currentDuration.toString() + }else{ + fusionTrafficLightNum.text = "0" + } + //TODO 更新指针指向 } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java index de6bf70bda..a9b80cd1f6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java @@ -3,11 +3,19 @@ package com.mogo.eagle.core.function.hmi.ui.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.SweepGradient; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import androidx.annotation.Nullable; import com.mogo.eagle.core.function.hmi.R; + +import java.util.ArrayList; +import java.util.List; + import me.jessyan.autosize.utils.AutoSizeUtils; /** @@ -16,11 +24,19 @@ import me.jessyan.autosize.utils.AutoSizeUtils; */ public class ProportionChartView extends View { - private static int DEFAULT_RING_WIDTH = 5; + private static final int DEFAULT_RING_WIDTH = 8; private float mRingWidth = 0; private Paint mRingPaint; private float mRadius; -// private List + private RectF mRectF; + //红绿灯绿灯、黄灯、红灯灯色时间 + private List proportionList = new ArrayList<>(); + //一轮灯态的总时长 + private int totalDuration = 0; + + int[] greenColorArray = new int[]{Color.parseColor("#5EFDE3"),Color.parseColor("#3CCFB9")}; + int[] yellowColorArray = new int[]{Color.parseColor("#FFEA3D"),Color.parseColor("#D49840")}; + int[] redColorArray = new int[]{Color.parseColor("#FF7373"),Color.parseColor("#CB564E")}; public ProportionChartView(Context context) { super(context); @@ -35,6 +51,21 @@ public class ProportionChartView extends View { init(); } + /** + * 更新红绿灯时间 + * @param list 时间列表 + */ + public void updateProportion(List list){ + if(list != null){ + this.proportionList = list; + totalDuration = 0; + for(int element: proportionList){ + totalDuration += element; + } + postInvalidate(); + } + } + public ProportionChartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initAttr(context, attrs); @@ -71,6 +102,7 @@ public class ProportionChartView extends View { * 初始化画笔 */ private void init(){ + mRectF = new RectF(); mRingPaint = new Paint(); //抗锯齿 mRingPaint.setAntiAlias(true); @@ -99,6 +131,7 @@ public class ProportionChartView extends View { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); + Log.i("xuxinchao","onDraw canvas"); drawRingView(canvas); } @@ -106,8 +139,35 @@ public class ProportionChartView extends View { * 画Ring */ private void drawRingView(Canvas canvas){ + Log.i("xuxinchao","drawRingView 画Ring"); float sweepAngle = 0f; - float startAngle = 0f; + float startAngle = -90f; + //矩形坐标 + mRectF.set(getPaddingLeft() + mRingWidth / 2 , getPaddingTop() + mRingWidth / 2 , + getWidth() - getPaddingRight() - mRingWidth / 2, getHeight() - getPaddingBottom() - mRingWidth / 2 ); + + for(int i=0;i + \ No newline at end of file