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 bb913983ad..08dc7f67c6 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
@@ -13,6 +13,7 @@ import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListen
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.fusionTrafficLightBg
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
@@ -33,12 +34,29 @@ class FusionTrafficLightView @JvmOverloads constructor(
private const val TAG = "FusionTrafficLightView"
}
+ private var user = 0 //使用方,driver:0 passenger:1
private var mCurrentLightId = TrafficLightEnum.BLACK
+ private var totalDuration = 0 //一轮灯态的总时长
+ private var maxGreenDuration = 0 //绿灯最长时间
+ private var maxYellowDuration = 0 //黄灯最长时间
+ private var maxRedDuration = 0 //红灯最长时间
+
+
+ init {
+ val typedArray = context.obtainStyledAttributes(attrs, R.styleable.FusionTrafficLightView)
+ user = typedArray.getInt(R.styleable.FusionTrafficLightView_fusionLightUser,0)
+ typedArray.recycle()
+ }
override fun onAttachedToWindow() {
super.onAttachedToWindow()
LayoutInflater.from(context).inflate(R.layout.hmi_view_fusion_traffic_light, this, true)
CallerTrafficLightListenerManager.addListener(TAG, this)
+ if(user == 0){
+ fusionTrafficLightBg.setBackgroundResource(R.drawable.bg_fusion_traffic_light)
+ }else{
+ fusionTrafficLightBg.setBackgroundResource(R.drawable.bg_fusion_traffic_light_p)
+ }
}
override fun onDetachedFromWindow() {
@@ -85,37 +103,51 @@ class FusionTrafficLightView @JvmOverloads constructor(
when (currentState) {
TrafficLightEnum.GREEN -> {
proportionList.add(0,currentDuration)
+ maxGreenDuration = currentDuration
}
TrafficLightEnum.YELLOW -> {
proportionList.add(1,currentDuration)
+ maxYellowDuration = currentDuration
}
else -> {
proportionList.add(2,currentDuration)
+ maxRedDuration = currentDuration
}
}
when(nextState){
TrafficLightEnum.GREEN -> {
proportionList.add(0,nextDuration)
+ maxGreenDuration = nextDuration
}
TrafficLightEnum.YELLOW -> {
proportionList.add(1,nextDuration)
+ maxYellowDuration = nextDuration
}
else -> {
proportionList.add(2,nextDuration)
+ maxRedDuration = nextDuration
}
}
when(nextTwoState){
TrafficLightEnum.GREEN -> {
proportionList.add(0,nextTwoDuration)
+ maxGreenDuration = nextTwoDuration
}
TrafficLightEnum.YELLOW -> {
proportionList.add(1,nextTwoDuration)
+ maxYellowDuration = nextTwoDuration
}
else -> {
proportionList.add(2,nextTwoDuration)
+ maxRedDuration = nextTwoDuration
}
}
fusionTrafficLightProportion.updateProportion(proportionList)
+ totalDuration = maxGreenDuration + maxYellowDuration + maxRedDuration
+ Log.i("xuxinchao","totalDuration="+totalDuration)
+ Log.i("xuxinchao","maxGreenDuration="+maxGreenDuration)
+ Log.i("xuxinchao","maxYellowDuration="+maxYellowDuration)
+ Log.i("xuxinchao","maxRedDuration="+maxRedDuration)
}
//根据当前灯态设置转盘、刻度、指针背景
when(currentState){
@@ -141,7 +173,37 @@ class FusionTrafficLightView @JvmOverloads constructor(
}else{
fusionTrafficLightNum.text = "0"
}
- //TODO 更新指针指向
+ //当时间为1开头时时间视觉上看不是左右居中对齐,需要做便宜操作
+ if(currentDuration.toString().startsWith("1")){
+ val numLayoutParams = fusionTrafficLightNum.layoutParams as LayoutParams
+ numLayoutParams.rightMargin = 10
+ fusionTrafficLightNum.layoutParams = numLayoutParams
+ }else{
+ val numLayoutParams = fusionTrafficLightNum.layoutParams as LayoutParams
+ numLayoutParams.rightMargin = 0
+ fusionTrafficLightNum.layoutParams = numLayoutParams
+ }
+
+ //更新指针指向
+ val pointerLayoutParams = fusionTrafficLightPointer.layoutParams as LayoutParams
+ var currentAngle = 0f
+ currentAngle = when (currentState) {
+ TrafficLightEnum.GREEN -> {
+ 360f*(maxGreenDuration-currentDuration)/totalDuration
+ }
+
+ TrafficLightEnum.YELLOW -> {
+ 360f*(maxGreenDuration+maxYellowDuration-currentDuration)/totalDuration
+ }
+
+ else -> {
+ 360f*(maxGreenDuration+maxYellowDuration+maxRedDuration-currentDuration)/totalDuration
+ }
+ }
+ pointerLayoutParams.circleAngle = currentAngle
+ fusionTrafficLightPointer.rotation = currentAngle
+ fusionTrafficLightPointer.layoutParams = pointerLayoutParams
+
}
}
\ 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 a9b80cd1f6..56c67650ad 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
@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.SweepGradient;
@@ -155,14 +156,23 @@ public class ProportionChartView extends View {
//设置绿灯渐变色
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
greenColorArray,null);
+ Matrix rotateMatrix = new Matrix();
+ rotateMatrix.setRotate(270,getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f);
+ sweepGradient.setLocalMatrix(rotateMatrix);
}else if(i == 1){
//设置黄灯渐变色
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
yellowColorArray,null);
+ Matrix rotateMatrix = new Matrix();
+ rotateMatrix.setRotate(270+(360*proportionList.get(0)),getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f);
+ sweepGradient.setLocalMatrix(rotateMatrix);
}else{
//设置红灯渐变色
sweepGradient = new SweepGradient(getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f,
redColorArray,null);
+ Matrix rotateMatrix = new Matrix();
+ rotateMatrix.setRotate(270+(360*proportionList.get(0)+proportionList.get(1)),getWidth()/2f,(getPaddingTop() + getHeight() - getPaddingBottom())/2f);
+ sweepGradient.setLocalMatrix(rotateMatrix);
}
mRingPaint.setShader(sweepGradient);
//画圆环
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_fusion_traffic_light.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_fusion_traffic_light.png
new file mode 100644
index 0000000000..5df329c378
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_fusion_traffic_light.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/attr.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/attr.xml
index 97d42d7bee..75121362da 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/attr.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/attr.xml
@@ -122,4 +122,11 @@
+
+
+
+
+
+
+
\ No newline at end of file