[6.5.0]红绿灯兼容异常数据显示

This commit is contained in:
xuxinchao
2024-07-21 01:35:51 +08:00
parent 01ad9b823a
commit 18c4c06259

View File

@@ -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
}