[6.5.0]融合红绿灯
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<Int>()
|
||||
//按照绿、黄、红的顺序将灯态时间添加到数组
|
||||
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 更新指针指向
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<Float>
|
||||
private RectF mRectF;
|
||||
//红绿灯绿灯、黄灯、红灯灯色时间
|
||||
private List<Integer> 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<Integer> 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<proportionList.size();i++){
|
||||
startAngle += sweepAngle;
|
||||
sweepAngle = 360f*proportionList.get(i)/totalDuration;
|
||||
SweepGradient sweepGradient;
|
||||
//设置渐变颜色
|
||||
if(i == 0){
|
||||
//设置绿灯渐变色
|
||||
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
|
||||
greenColorArray,null);
|
||||
}else if(i == 1){
|
||||
//设置黄灯渐变色
|
||||
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
|
||||
yellowColorArray,null);
|
||||
}else{
|
||||
//设置红灯渐变色
|
||||
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
|
||||
redColorArray,null);
|
||||
}
|
||||
mRingPaint.setShader(sweepGradient);
|
||||
//画圆环
|
||||
canvas.drawArc(mRectF, startAngle, sweepAngle - 2, false, mRingPaint);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/fusion_traffic_light_bg"
|
||||
android:id="@+id/fusionTrafficLightBg"
|
||||
android:layout_width="@dimen/dp_250"
|
||||
android:layout_height="@dimen/dp_250"
|
||||
android:background="@drawable/bg_fusion_traffic_light_p"
|
||||
>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fusion_traffic_light_state"
|
||||
android:id="@+id/fusionTrafficLightState"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_147"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@@ -21,7 +21,7 @@
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fusion_traffic_light_scale"
|
||||
android:id="@+id/fusionTrafficLightScale"
|
||||
android:layout_width="@dimen/dp_148"
|
||||
android:layout_height="@dimen/dp_148"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@@ -33,10 +33,10 @@
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/fusion_traffic_light_pointer"
|
||||
android:id="@+id/fusionTrafficLightPointer"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintCircle="@id/fusion_traffic_light_state"
|
||||
app:layout_constraintCircle="@id/fusionTrafficLightState"
|
||||
app:layout_constraintCircleRadius="@dimen/dp_60"
|
||||
android:src="@drawable/icon_light_green_pointer"
|
||||
android:contentDescription="@string/fusion_traffic_light_pointer"
|
||||
@@ -44,7 +44,7 @@
|
||||
/>
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.TypefaceTextView
|
||||
android:id="@+id/fusion_traffic_light_num"
|
||||
android:id="@+id/fusionTrafficLightNum"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@@ -56,5 +56,14 @@
|
||||
android:textStyle="bold"
|
||||
/>
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.ProportionChartView
|
||||
android:id="@+id/fusionTrafficLightProportion"
|
||||
android:layout_width="@dimen/dp_170"
|
||||
android:layout_height="@dimen/dp_170"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
Reference in New Issue
Block a user