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 722d9bf66e..2c3208ed3d 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 @@ -1,26 +1,24 @@ package com.mogo.eagle.core.function.hmi.map +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.IntEvaluator +import android.animation.ValueAnimator import android.content.Context import android.os.Bundle -import android.transition.Transition -import android.transition.Transition.TransitionListener import android.util.AttributeSet import android.view.LayoutInflater import android.view.View -import android.view.animation.AccelerateDecelerateInterpolator import androidx.constraintlayout.widget.ConstraintLayout -import androidx.constraintlayout.widget.ConstraintSet 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 import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.util.ConstraintUtil import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener import com.mogo.map.listener.IMogoMapListener import com.mogo.map.listener.MogoMapListenerHandler import kotlinx.android.synthetic.main.view_map_container.view.mapBizView import kotlinx.android.synthetic.main.view_map_container.view.overMapView -import kotlinx.android.synthetic.main.view_map_container.view.parentLayout import kotlinx.android.synthetic.main.view_map_container.view.shadowView import kotlinx.android.synthetic.main.view_map_container.view.visualAngleToggle @@ -33,7 +31,6 @@ class MapContainerLayout @JvmOverloads constructor( @Volatile private var isScaled = false private var isPlayingAnim = false - private var constraintUtil: ConstraintUtil? = null init { LayoutInflater.from(context).inflate(R.layout.view_map_container, this, true) @@ -86,7 +83,7 @@ class MapContainerLayout @JvmOverloads constructor( private fun initView() { shadowView.setOnClickListener(object : OnPreventFastClickListener() { override fun onClickImpl(v: View?) { - swapViewsWithAnim() + scaleMapWithAnim() } }) } @@ -104,36 +101,48 @@ class MapContainerLayout @JvmOverloads constructor( } } - private fun swapViewsWithAnim() { + private fun scaleMapWithAnim() { if (isPlayingAnim) return - if (constraintUtil == null) { - constraintUtil = ConstraintUtil(parentLayout, 300, AccelerateDecelerateInterpolator()) - constraintUtil?.addTransitionListener(transitionListener) - } if (!isScaled) { - // 获取属性集并设置动画 - val begin = constraintUtil!!.beginWithAnim() - // 清除约束关系 - begin.clear(R.id.overMapView) - // 设置新的约束关系 - begin.Left_toLeftOf(R.id.overMapView, ConstraintSet.PARENT_ID) - begin.Top_toTopOf(R.id.overMapView, ConstraintSet.PARENT_ID) - begin.Right_toRightOf(R.id.overMapView, ConstraintSet.PARENT_ID) - begin.Bottom_toBottomOf(R.id.overMapView, ConstraintSet.PARENT_ID) - // 应用新的属性集 - begin.commit() + val valueAnimator = ValueAnimator.ofInt(270, 1560) + 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.addListener(listenerAdapter) + valueAnimator.duration = 350 + valueAnimator.start() } else { - constraintUtil?.reSetWidthAnim() + val valueAnimator = ValueAnimator.ofInt(1560, 270) + 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.addListener(listenerAdapter) + valueAnimator.duration = 350 + valueAnimator.start() } } - private val transitionListener = object : TransitionListener { - override fun onTransitionStart(transition: Transition?) { + private val listenerAdapter = object : AnimatorListenerAdapter() { + override fun onAnimationStart(animation: Animator) { + super.onAnimationStart(animation) isPlayingAnim = true overMapView.setMapFlag(isScaled) } - override fun onTransitionEnd(transition: Transition?) { + override fun onAnimationCancel(animation: Animator) { + super.onAnimationCancel(animation) isPlayingAnim = false overMapView.swapSettings() updateShadowBg(isScaled) @@ -145,19 +154,17 @@ class MapContainerLayout @JvmOverloads constructor( } } - override fun onTransitionCancel(transition: Transition?) { + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) isPlayingAnim = false overMapView.swapSettings() updateShadowBg(isScaled) isScaled = !isScaled - } - - override fun onTransitionPause(transition: Transition?) { - isPlayingAnim = false - } - - override fun onTransitionResume(transition: Transition?) { - isPlayingAnim = true + if (isScaled) { + visualAngleToggle?.takeIf { it.visibility == View.VISIBLE }?.visibility = View.GONE + } else { + visualAngleToggle?.takeIf { it.visibility != View.VISIBLE }?.visibility = View.VISIBLE + } } } 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 3752736a64..d0ba8b9a36 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 @@ -21,16 +21,16 @@ android:id="@+id/overMapView" android:layout_width="270dp" android:layout_height="270dp" - android:layout_marginEnd="60dp" - android:layout_marginBottom="60dp" + 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_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" app:leftPadding="70" app:mapStyleExtraPath="over_view_style_extra.data" app:mapStylePath="over_view_style.data"