diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index d8512e230d..2905e86a9a 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -46,6 +46,7 @@ import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; import com.mogo.module.extensions.navi.NaviInfoView; import com.mogo.module.extensions.navi.NaviInfoView2; +import com.mogo.module.extensions.utils.TopViewAnimHelper; import com.mogo.module.share.ShareControl; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; @@ -110,8 +111,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private EntrancePresenter mEntrancePresenter; private IMogoAuthorizeModuleManager mIMogoAuthorizeModuleManager; private IMogoStatusManager mStatusManager; - private ConstraintLayout topMotionLayout; - private NaviInfoView2 naviInfoView; + + private TopViewAnimHelper topViewAnimHelper; /** * 搜索莫模块 @@ -174,6 +175,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private Rect mDisplayOverviewBounds; private boolean toggle = false; + private boolean naviToggle = false; @Override protected int getLayoutId() { @@ -196,36 +198,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mUploading = findViewById( R.id.module_entrance_id_uploading ); mUploadRoadCondition.setOnClickListener( view -> { // todo 测试动画 - naviInfoView.setVisibility(View.VISIBLE); - - ConstraintSet beginSet = new ConstraintSet(); - beginSet.clone(topMotionLayout); - ConstraintSet endSet = new ConstraintSet(); - endSet.clone(topMotionLayout); - - beginSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = - R.id.module_entrance_id_top_motion_layout; - beginSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = -1; - - endSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1; - endSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = - R.id.module_entrance_id_top_motion_layout; -// topMotionLayout.setScene(hasNaviScene); - Transition transition = new AutoTransition(); - transition.setDuration(500); - TransitionManager.beginDelayedTransition(topMotionLayout,transition); - if(!toggle) { - endSet.applyTo(topMotionLayout); - naviInfoView.getLayoutParams().height = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height); -// naviInfoView.transitionToEnd(); + if (!naviToggle) { + topViewAnimHelper.showNaviView(); }else{ - beginSet.applyTo(topMotionLayout); - naviInfoView.getLayoutParams().height = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_height); -// naviInfoView.transitionToStart(); + topViewAnimHelper.hideNaviView(); } - toggle = !toggle; + naviToggle = !naviToggle; // 原始逻辑 // isClickShare = true; // if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { @@ -236,9 +214,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // } } ); - topMotionLayout = findViewById(R.id.module_entrance_id_top_motion_layout); - naviInfoView = findViewById(R.id.mlNaviInfo); - mDisplayOverview = findViewById( R.id.module_ext_id_display_overview ); mDisplayOverviewText = findViewById( R.id.module_ext_id_display_overview_text ); mDisplayOverviewIcon = findViewById( R.id.module_ext_id_display_overview_icon ); @@ -254,26 +229,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location ); mMove2CurrentLocation.setOnClickListener( view -> { // todo 测试动画 - naviInfoView.setVisibility(View.GONE); - - ConstraintSet beginSet = new ConstraintSet(); - beginSet.clone(topMotionLayout); - ConstraintSet endSet = new ConstraintSet(); - endSet.clone(topMotionLayout); - - beginSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = - R.id.module_entrance_id_top_motion_layout; - beginSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = -1; - - endSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1; - endSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = - R.id.module_entrance_id_top_motion_layout; -// topMotionLayout.setScene(hasNaviScene); - TransitionManager.beginDelayedTransition(topMotionLayout); - if(!toggle) { - endSet.applyTo(topMotionLayout); + if (!toggle) { + topViewAnimHelper.startTopInAnim(); }else{ - beginSet.applyTo(topMotionLayout); + topViewAnimHelper.startTopOutAnim(); } toggle = !toggle; // 原始逻辑 @@ -290,6 +249,11 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent } ); // mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); + ConstraintLayout rootView = findViewById(R.id.module_entrance_id_top_motion_layout); + if(rootView!=null) { + topViewAnimHelper = new TopViewAnimHelper(rootView); + } + mExitNavi = findViewById( R.id.module_entrance_id_exit_navi ); mExitNavi.setOnClickListener( view -> { if ( mMogoNavi != null ) { diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java new file mode 100644 index 0000000000..1242013112 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java @@ -0,0 +1,107 @@ +package com.mogo.module.extensions.utils; + +import android.content.res.Resources; +import android.transition.AutoTransition; +import android.transition.Transition; +import android.transition.TransitionManager; +import android.view.View; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.ConstraintSet; +import androidx.constraintlayout.widget.Group; + +import com.mogo.module.extensions.R; +import com.mogo.utils.logger.Logger; + + +/** + * 顶部动画帮助类 + * + * @author tongchenfei + */ +public class TopViewAnimHelper { + + private ConstraintLayout topMotionLayout; + private Group naviGroup,remainTimeGroup,remainDistanceGroup, arriveTimeGroup; + private View naviBg; + + private ConstraintSet constraintSet = new ConstraintSet(); + private Transition transition = new AutoTransition(); + + public TopViewAnimHelper(ConstraintLayout rootView) { + topMotionLayout = rootView; + naviBg = rootView.findViewById(R.id.module_map_id_navi_bg); + naviGroup = rootView.findViewById(R.id.naviGroup); + remainTimeGroup = rootView.findViewById(R.id.remainTimeGroup); + remainDistanceGroup = rootView.findViewById(R.id.remainDistanceGroup); + arriveTimeGroup = rootView.findViewById(R.id.arriveTimeGroup); + transition.setDuration(2000); + } + + private boolean isTopViewOut = true; + + public void startTopInAnim(){ + Logger.d("TopViewAnimHelper", "startTopInAnim====="); + if(isTopViewOut) { + constraintSet.clone(topMotionLayout); + + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1; + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = + R.id.module_entrance_id_top_motion_layout; + + TransitionManager.beginDelayedTransition(topMotionLayout, transition); + constraintSet.applyTo(topMotionLayout); + if(naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + } + naviBg.getLayoutParams().height = + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height); + isTopViewOut = false; + } + } + + public void startTopOutAnim(){ + Logger.d("TopViewAnimHelper", "startTopOutAnim====="); + if(!isTopViewOut) { + constraintSet.clone(topMotionLayout); + + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = + R.id.module_entrance_id_top_motion_layout; + constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.topToTop = -1; + TransitionManager.beginDelayedTransition(topMotionLayout, transition); + constraintSet.applyTo(topMotionLayout); + if(naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.VISIBLE); + remainTimeGroup.setVisibility(View.VISIBLE); + arriveTimeGroup.setVisibility(View.VISIBLE); + } + naviBg.getLayoutParams().height = + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_height); + isTopViewOut = true; + } + } + + public void showNaviView(){ + Logger.d("TopViewAnimHelper", "showNaviView====="); + naviGroup.setVisibility(View.VISIBLE); + if (isTopViewOut) { + remainDistanceGroup.setVisibility(View.VISIBLE); + remainTimeGroup.setVisibility(View.VISIBLE); + arriveTimeGroup.setVisibility(View.VISIBLE); + }else{ + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + } + } + + public void hideNaviView(){ + Logger.d("TopViewAnimHelper", "hideNaviView====="); + naviGroup.setVisibility(View.GONE); + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + } +} diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index c4743dc657..ad52d3abdd 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -22,216 +22,217 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> - + + + android:background="@drawable/module_ext_dw_navi_info_panel_bkg" /> - + - + - + - + - + - + + + - - - + - + - + - + + + - - - + - + - + - + + + - - - + - - - - + @@ -259,8 +260,8 @@ android:gravity="center" android:orientation="vertical" android:visibility="visible" - app:layout_constraintLeft_toLeftOf="@+id/mlNaviInfo" - app:layout_constraintTop_toBottomOf="@+id/mlNaviInfo"> + app:layout_constraintLeft_toLeftOf="@+id/module_map_id_navi_bg" + app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg">