From 18c4c0625900537bdc41d95e46d55fa56e61345e Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Sun, 21 Jul 2024 01:35:51 +0800 Subject: [PATCH] =?UTF-8?q?[6.5.0]=E7=BA=A2=E7=BB=BF=E7=81=AF=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E5=BC=82=E5=B8=B8=E6=95=B0=E6=8D=AE=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/widget/FusionTrafficLightView.kt | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) 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 376027f50d..529285e630 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 @@ -16,7 +16,6 @@ import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import java.util.LinkedList /** * 融合红绿灯View @@ -45,6 +44,8 @@ class FusionTrafficLightView @JvmOverloads constructor( private var currentLightState = TrafficLightEnum.BLACK //当前灯态 private var currentLightDuration = 0 //当前灯态倒计时 + private var previousLightStatus = TrafficLightEnum.BLACK //上一帧灯态 + private var previousLightDuration = 0 //上一帧灯态倒计时 private var redLightRoundNum = 0 //当前路口红灯出现的轮数 private var greenLightRoundNum = 0 //当前路口绿灯出现的轮数 @@ -82,11 +83,11 @@ class FusionTrafficLightView @JvmOverloads constructor( override fun disableTrafficLight() { super.disableTrafficLight() UiThreadHandler.post{ - mCurrentLightId = TrafficLightEnum.BLACK this@FusionTrafficLightView.visibility = GONE CallerHmiViewControlListenerManager.invokeV2XEvent(View.GONE, TAG) //将灯态轮归零 returnToZero() + resetLight() } } @@ -99,11 +100,21 @@ class FusionTrafficLightView @JvmOverloads constructor( yellowLightRoundNum = 0 //当前路口黄灯出现的轮数 } + /** + * 重置灯态 + */ + private fun resetLight(){ + currentLightState = TrafficLightEnum.BLACK + currentLightDuration = 0 + previousLightStatus = TrafficLightEnum.BLACK + previousLightDuration = 0 + } + /** * 判断是否进入新的一轮灯态 * @param currentState 当前灯态 */ - private fun judgeRoundNun(currentState: TrafficLightEnum): Boolean{ + private fun judgeRoundNum(currentState: TrafficLightEnum): Boolean{ if(currentLightState == currentState){ return false }else{ @@ -155,8 +166,30 @@ class FusionTrafficLightView @JvmOverloads constructor( if(this@FusionTrafficLightView.visibility == View.GONE && currentDuration < 1){ return@runOnUiThread } + /** + * 如果红绿灯显示过程中遇到突然灯态发生改变即当前灯态未倒计时完成灯态发生变化 + * (正常情况下不会出现此情况,兼容异常状态) + * 重置灯态占比和指针指向 + */ + if(previousLightStatus == TrafficLightEnum.BLACK && previousLightDuration == 0 + && currentState != TrafficLightEnum.BLACK && currentDuration != 0){ + previousLightStatus = currentState + previousLightDuration = currentDuration + }else{ + if((currentState != previousLightStatus && previousLightDuration >1) + || (currentState == previousLightStatus && previousLightDuration < currentDuration)){ + //灯态未倒计时到1,灯态发生变化(正常情况是倒计时到0,考虑到可能存在的异常情况,倒计时到1也算正常) + returnToZero() + resetLight() + }else{ + previousLightStatus = currentState + previousLightDuration = currentDuration + } + } + + //如果当前红绿灯视图为隐藏状态则设置为显示状态 - if(judgeRoundNun(currentState)){ + if(judgeRoundNum(currentState)){ if(this@FusionTrafficLightView.visibility == View.GONE){ this@FusionTrafficLightView.visibility = View.VISIBLE }