diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/map/MapContainerLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/map/MapContainerLayout.kt index 2c3208ed3d..5fadbead40 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/map/MapContainerLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/map/MapContainerLayout.kt @@ -9,7 +9,10 @@ import android.os.Bundle import android.util.AttributeSet import android.view.LayoutInflater import android.view.View +import android.view.animation.AccelerateDecelerateInterpolator import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.marginStart +import androidx.core.view.marginTop import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.function.api.order.IOrderListener import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager @@ -31,6 +34,14 @@ class MapContainerLayout @JvmOverloads constructor( @Volatile private var isScaled = false private var isPlayingAnim = false + private var mapMinWidth = 0 + private var mapMinHeight = 0 + private var mapMaxWidth = 0 + private var mapMaxHeight = 0 + private var maxMarginStart = 0 + private var maxMarginTop = 0 + + private var valueAnimator: ValueAnimator? = null init { LayoutInflater.from(context).inflate(R.layout.view_map_container, this, true) @@ -69,15 +80,37 @@ class MapContainerLayout @JvmOverloads constructor( overMapView.onDestroy() } + override fun onWindowFocusChanged(hasWindowFocus: Boolean) { + super.onWindowFocusChanged(hasWindowFocus) + if (hasWindowFocus) { + if (mapMaxWidth == 0 && maxMarginStart == 0) { + calculate() + } + } + } + + private fun calculate() { + mapMaxWidth = width + mapMaxHeight = height + mapMinWidth = overMapView.width + mapMinHeight = overMapView.height + maxMarginStart = overMapView.marginStart + maxMarginTop = overMapView.marginTop + } + override fun onAttachedToWindow() { super.onAttachedToWindow() - MogoMapListenerHandler.mogoMapListenerHandler.registerHostMapListener("${TAG}${this.hashCode()}",this) + MogoMapListenerHandler.mogoMapListenerHandler.registerHostMapListener( + "${TAG}${this.hashCode()}", + this + ) CallerOrderListenerManager.addListener("${TAG}${this.hashCode()}", this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() MogoMapListenerHandler.mogoMapListenerHandler.unregisterHostMapListener("${TAG}${this.hashCode()}") + valueAnimator?.removeAllListeners() } private fun initView() { @@ -103,38 +136,45 @@ class MapContainerLayout @JvmOverloads constructor( private fun scaleMapWithAnim() { if (isPlayingAnim) return + if (mapMaxWidth == 0 && maxMarginStart == 0 && !isScaled) { + calculate() + } if (!isScaled) { - val valueAnimator = ValueAnimator.ofInt(270, 1560) + valueAnimator = ValueAnimator.ofInt(mapMinWidth, mapMaxWidth) val evaluator = IntEvaluator() - valueAnimator.addUpdateListener { - overMapView.layoutParams = (overMapView.layoutParams as LayoutParams).also { layoutParams -> - layoutParams.width = it.animatedValue as Int - layoutParams.height = evaluator.evaluate(it.animatedFraction, 270, 1534) - layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, 1230, 0) - layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, 1204, 0) - } + valueAnimator?.addUpdateListener { + overMapView.layoutParams = + (overMapView.layoutParams as LayoutParams).also { layoutParams -> + layoutParams.width = it.animatedValue as Int + layoutParams.height = evaluator.evaluate(it.animatedFraction, mapMinHeight, mapMaxHeight) + layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, maxMarginStart, 0) + layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, maxMarginTop, 0) + } } - valueAnimator.addListener(listenerAdapter) - valueAnimator.duration = 350 - valueAnimator.start() + valueAnimator?.interpolator = AccelerateDecelerateInterpolator() + valueAnimator?.addListener(listenerAdapter) + valueAnimator?.duration = 400 + valueAnimator?.start() } else { - val valueAnimator = ValueAnimator.ofInt(1560, 270) + valueAnimator = ValueAnimator.ofInt(mapMaxWidth, mapMinWidth) val evaluator = IntEvaluator() - valueAnimator.addUpdateListener { - overMapView.layoutParams = (overMapView.layoutParams as LayoutParams).also { layoutParams -> - layoutParams.width = it.animatedValue as Int - layoutParams.height = evaluator.evaluate(it.animatedFraction, 1534, 270) - layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, 0, 1230) - layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, 0, 1204) - } + valueAnimator?.addUpdateListener { + overMapView.layoutParams = + (overMapView.layoutParams as LayoutParams).also { layoutParams -> + layoutParams.width = it.animatedValue as Int + layoutParams.height = evaluator.evaluate(it.animatedFraction, mapMaxHeight, mapMinHeight) + layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginStart) + layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginTop) + } } - valueAnimator.addListener(listenerAdapter) - valueAnimator.duration = 350 - valueAnimator.start() + valueAnimator?.interpolator = AccelerateDecelerateInterpolator() + valueAnimator?.addListener(listenerAdapter) + valueAnimator?.duration = 400 + valueAnimator?.start() } } - private val listenerAdapter = object : AnimatorListenerAdapter() { + private val listenerAdapter = object : AnimatorListenerAdapter() { override fun onAnimationStart(animation: Animator) { super.onAnimationStart(animation) isPlayingAnim = true @@ -150,7 +190,8 @@ class MapContainerLayout @JvmOverloads constructor( if (isScaled) { visualAngleToggle?.takeIf { it.visibility == View.VISIBLE }?.visibility = View.GONE } else { - visualAngleToggle?.takeIf { it.visibility != View.VISIBLE }?.visibility = View.VISIBLE + visualAngleToggle?.takeIf { it.visibility != View.VISIBLE }?.visibility = + View.VISIBLE } } @@ -163,7 +204,8 @@ class MapContainerLayout @JvmOverloads constructor( if (isScaled) { visualAngleToggle?.takeIf { it.visibility == View.VISIBLE }?.visibility = View.GONE } else { - visualAngleToggle?.takeIf { it.visibility != View.VISIBLE }?.visibility = View.VISIBLE + visualAngleToggle?.takeIf { it.visibility != View.VISIBLE }?.visibility = + View.VISIBLE } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/gaojing_bg.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/gaojing_bg.png index e866b67c87..a8540cd69a 100644 Binary files a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/gaojing_bg.png and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/gaojing_bg.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_container.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_container.xml index 052b448533..bdcd212a63 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_container.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_map_container.xml @@ -89,10 +89,11 @@ + app:layout_constraintEnd_toEndOf="parent" + /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt index c074825a1b..7f6e382b0c 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt @@ -447,6 +447,8 @@ class TravelRealityView @JvmOverloads constructor( ) // 设置自定义样式 mAMap?.setCustomMapStyle(customMapStyleOptions1) + mAMap?.uiSettings?.isZoomControlsEnabled = false + mAMap?.uiSettings?.setLogoBottomMargin(-150) } mAMap?.setAMapGestureListener(gestListener) } @@ -468,7 +470,7 @@ class TravelRealityView @JvmOverloads constructor( //设置希望展示的地图缩放级别 val loc = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() if (loc.latitude.toInt() == 0 || loc.longitude.toInt() == 0) { - moveMapCamera(CameraUpdateFactory.zoomTo(14f)) + moveMapCamera(CameraUpdateFactory.zoomTo(17f)) } else { moveMapCamera(CameraUpdateFactory.newLatLngZoom( coordinateConverterWgsToGcj( @@ -540,7 +542,7 @@ class TravelRealityView @JvmOverloads constructor( if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { if (isSmallMap) { this.outlineProvider = TextureVideoViewOutlineProvider( - AutoSizeUtils.dp2px(context, 32f) + AutoSizeUtils.dp2px(context, 38f) .toFloat() ) this.clipToOutline = true