[6.7.0] map ui union

This commit is contained in:
EmArrow
2024-09-27 16:03:47 +08:00
parent e87b63f770
commit d998b4366a
21 changed files with 99 additions and 621 deletions

View File

@@ -1,238 +0,0 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.widget.RelativeLayout
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.enums.WarningDirectionEnum.*
import com.mogo.eagle.core.function.api.hmi.warning.IV2XEventListener
import com.mogo.eagle.core.function.call.v2x.CallerV2XWarningListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.view_v2x_warning.view.*
import java.util.concurrent.atomic.AtomicReference
class V2XWarningView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : RelativeLayout(context, attrs, defStyleAttr), IV2XEventListener {
companion object {
private const val ALL_CLOSE_TIMER = 5000L
private const val TAG = "V2XWarningView"
}
private val closeWarningTask: Runnable = Runnable {
showWarning(ALERT_WARNING_NON)
}
private val oldDirection = AtomicReference<WarningDirectionEnum>()
init {
LayoutInflater.from(context).inflate(R.layout.view_v2x_warning, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerV2XWarningListenerManager.addListener(TAG, this)
}
override fun show(v2xType: String, direction: WarningDirectionEnum, time: Long) {
showWarning(direction, time)
}
override fun dismiss(direction: WarningDirectionEnum) {
dismissWarning(direction)
}
/**
* 展示指定方位上的红框预警
* @param direction
* @see WarningDirectionEnum
*/
private fun showWarning(direction: WarningDirectionEnum, time: Long = ALL_CLOSE_TIMER) {
// 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示
if (oldDirection.get() == direction) {
removeCallbacks(closeWarningTask)
postDelayed(closeWarningTask, time)
return
}
if (direction != ALERT_WARNING_NON) {
oldDirection.set(direction)
removeCallbacks(closeWarningTask)
postDelayed(closeWarningTask, time)
}
post {
when (direction) {
ALERT_WARNING_NON -> {
// nothing
}
ALERT_WARNING_TOP -> {
hmiWarningTopImg.visibility = View.VISIBLE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_RIGHT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.VISIBLE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_BOTTOM -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.VISIBLE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_LEFT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.VISIBLE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_TOP_RIGHT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.VISIBLE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_BOTTOM_RIGHT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.VISIBLE
}
ALERT_WARNING_BOTTOM_LEFT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.VISIBLE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_TOP_LEFT -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.VISIBLE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_ALL -> { //todo problem
hmiWarningTopImg.visibility = View.VISIBLE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
}
if (direction == ALERT_WARNING_NON) {
dismissWarning(ALERT_WARNING_ALL)
} else {
val alphaAnimation = AlphaAnimation(0f, 0.88f)
alphaAnimation.duration = 600
alphaAnimation.interpolator = LinearInterpolator()
alphaAnimation.repeatCount = Animation.INFINITE
alphaAnimation.repeatMode = Animation.REVERSE
startAnimation(alphaAnimation)
}
}
}
private fun dismissWarning(direction: WarningDirectionEnum) {
if (direction == ALERT_WARNING_NON) {
return
}
removeCallbacks(closeWarningTask)
post {
when (direction) {
ALERT_WARNING_TOP -> {
hmiWarningRightTopImg.visibility = View.GONE
}
ALERT_WARNING_RIGHT -> {
hmiWarningRightImg.visibility = View.GONE
}
ALERT_WARNING_BOTTOM -> {
hmiWarningBottomImg.visibility = View.GONE
}
ALERT_WARNING_LEFT -> {
hmiWarningLeftImg.visibility = View.GONE
}
ALERT_WARNING_TOP_RIGHT -> {
hmiWarningRightTopImg.visibility = View.GONE
}
ALERT_WARNING_BOTTOM_RIGHT -> {
hmiWarningRightBottomImg.visibility = View.GONE
}
ALERT_WARNING_BOTTOM_LEFT -> {
hmiWarningLeftBottomImg.visibility = View.GONE
}
ALERT_WARNING_TOP_LEFT -> {
hmiWarningLeftTopImg.visibility = View.GONE
}
ALERT_WARNING_ALL -> {
hmiWarningTopImg.visibility = View.GONE
hmiWarningRightImg.visibility = View.GONE
hmiWarningBottomImg.visibility = View.GONE
hmiWarningLeftImg.visibility = View.GONE
hmiWarningLeftTopImg.visibility = View.GONE
hmiWarningLeftBottomImg.visibility = View.GONE
hmiWarningRightTopImg.visibility = View.GONE
hmiWarningRightBottomImg.visibility = View.GONE
}
else -> {
CallerLogger.d("$M_HMI$TAG", "Not Support Direction")
}
}
clearAnimation()
this.oldDirection.set(null)
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerV2XWarningListenerManager.removeListener(TAG)
}
}

View File

@@ -11,6 +11,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_19"
android:layout_marginTop="@dimen/dp_76"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

View File

@@ -23,14 +23,13 @@
android:layout_height="270dp"
android:layout_marginStart="1230dp"
android:layout_marginTop="1204dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:bottomPadding="160"
app:carDrawable="@drawable/taxt_u_p_map_car"
app:compassDrawable="@drawable/taxt_u_p_map_car_light"
app:startPointDrawable="@drawable/taxi_overmap_startpoint"
app:endPointDrawable="@drawable/taxi_overmap_endpoint"
app:globalPathColor="#39BA90"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:leftPadding="70"
app:mapStyleExtraPath="over_view_style_extra.data"
app:mapStylePath="over_view_style.data"
@@ -38,6 +37,7 @@
app:rightPadding="70"
app:roadRangeDrawable="@drawable/taxi_overmap_road_range"
app:roadTrajectoryDrawable="@drawable/taxi_orvermap_road_trajectory"
app:startPointDrawable="@drawable/taxi_overmap_startpoint"
app:topPadding="70" />
<com.mogo.eagle.core.function.hmi.ui.viewport.VisualAngleToggleView
@@ -49,24 +49,34 @@
app:layout_constraintBottom_toTopOf="@+id/shadowView"
app:layout_constraintEnd_toEndOf="parent" />
<!--Vip车辆标志-->
<com.mogo.eagle.core.function.hmi.ui.widget.VipIdentificationView
android:layout_width="@dimen/module_vip_width"
android:layout_height="@dimen/module_vip_height"
android:layout_marginStart="@dimen/dp_640"
android:layout_marginTop="@dimen/dp_147"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.mofang.MoFangStatusView
android:id="@+id/mofangStatusView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_goneMarginEnd="@dimen/dp_50"
android:layout_marginBottom="@dimen/dp_30"
app:layout_constraintBottom_toTopOf="@+id/shadowView"
app:layout_constraintEnd_toStartOf="@+id/visualAngleToggle" />
app:layout_constraintEnd_toStartOf="@+id/visualAngleToggle"
app:layout_goneMarginEnd="@dimen/dp_50" />
<com.mogo.eagle.core.function.hmi.ui.widget.SingleTrafficLightView
android:id="@+id/viewTrafficLightVr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/hmi_traffic_light_layout_margin_top"
android:visibility="gone"
/>
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.widget.FusionTrafficLightView
android:layout_width="wrap_content"
@@ -78,14 +88,74 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--红绿灯提醒-->
<com.mogo.eagle.core.function.hmi.ui.notice.traffic.TrafficLightPromptView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_350"
android:layout_marginEnd="@dimen/dp_50"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:promptUser="driver" />
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="@dimen/dp_580"
android:layout_height="@dimen/dp_129"
android:layout_marginTop="@dimen/dp_71"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/viewTrafficLightVr"
app:layout_constraintTop_toBottomOf="@+id/viewTrafficLightVr"
app:layout_goneMarginEnd="40dp"
app:layout_goneMarginTop="@dimen/dp_236" />
<com.mogo.eagle.core.function.hmi.ui.msgbox.MsgBoxToastView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="@dimen/dp_53"
android:layout_marginEnd="@dimen/dp_60"
/>
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 事件弹框 -->
<com.mogo.eagle.core.function.hmi.ui.v2n.RoadV2NEventWindowView
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_39"
android:layout_marginEnd="@dimen/dp_23"
android:visibility="visible"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 前方路况探查 -->
<com.mogo.eagle.core.function.view.RoadCrossRoamView
android:layout_width="@dimen/dp_654"
android:layout_height="@dimen/dp_790"
android:layout_marginTop="@dimen/dp_39"
android:layout_marginEnd="@dimen/dp_4"
android:visibility="visible"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 地图marker点击触发路侧直播 -->
<com.mogo.eagle.core.function.hmi.ui.camera.RoadCrossLiveView
android:layout_width="@dimen/dp_800"
android:layout_height="@dimen/dp_560"
android:layout_marginTop="@dimen/dp_333"
android:layout_marginEnd="@dimen/dp_50"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--pnc行为决策-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.PncActionsView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_100"
android:layout_marginBottom="@dimen/dp_110"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/shadowView"

View File

@@ -1,82 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--四个方向,碰撞预警-->
<!--上方-->
<ImageView
android:id="@+id/hmiWarningTopImg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_328"
android:background="@drawable/module_hmi_warning_bkg_top"
android:visibility="gone"
tools:visibility="invisible" />
<!--左方-->
<ImageView
android:id="@+id/hmiWarningLeftImg"
android:layout_width="@dimen/dp_328"
android:layout_height="match_parent"
android:background="@drawable/module_hmi_warning_bkg_left"
android:visibility="gone"
tools:visibility="invisible" />
<!--左上角-->
<ImageView
android:id="@+id/hmiWarningLeftTopImg"
android:layout_width="@dimen/dp_1600"
android:layout_height="match_parent"
android:background="@drawable/top_left"
android:visibility="gone"
tools:visibility="invisible" />
<!--左下角-->
<ImageView
android:id="@+id/hmiWarningLeftBottomImg"
android:layout_width="@dimen/dp_1600"
android:layout_height="match_parent"
android:background="@drawable/bottom_left"
android:visibility="gone"
tools:visibility="invisible" />
<!--右方-->
<ImageView
android:id="@+id/hmiWarningRightImg"
android:layout_width="@dimen/dp_328"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@drawable/module_hmi_warning_bkg_right"
android:visibility="gone"
tools:visibility="invisible" />
<!--右上角-->
<ImageView
android:id="@+id/hmiWarningRightTopImg"
android:layout_width="@dimen/dp_1600"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@drawable/module_hmi_warning_bkg_right_top"
android:visibility="gone"
tools:visibility="invisible" />
<!--右下角-->
<ImageView
android:id="@+id/hmiWarningRightBottomImg"
android:layout_width="@dimen/dp_1600"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@drawable/bottom_right"
android:visibility="gone"
tools:visibility="invisible" />
<!--下方-->
<ImageView
android:id="@+id/hmiWarningBottomImg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_328"
android:layout_gravity="bottom"
android:background="@drawable/module_hmi_warning_bkg_bottom"
android:visibility="gone"
tools:visibility="invisible" />
</FrameLayout>