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 7ee3279e7b..95b753ebdb 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 @@ -57,6 +57,7 @@ import com.mogo.module.extensions.utils.CameraLiveNoticeHelper; import com.mogo.module.extensions.utils.EntranceViewHolder; import com.mogo.module.extensions.utils.NoMapTopViewShaderHelper; import com.mogo.module.extensions.utils.TopViewAnimHelper; +import com.mogo.module.extensions.utils.TopViewNoLinkageAnimHelper; import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.service.IMogoServiceApis; import com.mogo.service.analytics.IMogoAnalytics; @@ -223,7 +224,6 @@ public class EntranceFragment extends MvpFragment properties = new HashMap<>(); -// properties.put("type", 1); -// MogoApisHandler.getInstance().getApis().getAnalyticsApi().track("APP_Find_Mogoer", properties); -// } -// } ); tvEnterVrMode = findViewById(R.id.module_ext_enter_vr_mode); tvEnterVrMode.setOnClickListener((v)->{ // 进入vr模式 @@ -506,7 +487,7 @@ public class EntranceFragment extends MvpFragment { topContainerNoLinkage.setChildAddedListener(null); - NoMapTopViewShaderHelper.getInstance().showShader(); - - constraintSet.clone(topMotionLayout); - - constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage, - ConstraintSet.BOTTOM); - constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP, - R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP); - TransitionManager.beginDelayedTransition(topMotionLayout, transition); - checkCameraModePosition(false); - constraintSet.applyTo(topMotionLayout); - + topContainerNoLinkage.animate().translationY(child.getHeight()).setListener(mainAnimListener).start(); int scene = Scene.AIMLESS_WITH_ROAD_EVENT; Logger.d(TAG, "show top setMapCenterPointByScene: " + scene); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); @@ -387,7 +188,7 @@ public class TopViewNoLinkageAnimHelper { // vr模式下与TopView互斥 if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { - TopViewAnimHelper.getInstance().removeAllView(); + TopViewAnimHelper.getInstance().removeAllViewExceptVrNav(); } } @@ -395,9 +196,7 @@ public class TopViewNoLinkageAnimHelper { * 退出最新的(也就是最上面的)view */ private void startLatestTopOutAnim() { - if (topContainerNoLinkage.getChildCount() > 1) { - removeSubView(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1)); - } else if (topContainerNoLinkage.getChildCount() > 0) { + if (topContainerNoLinkage.getChildCount() > 0) { startTopOutAnim(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1)); } } @@ -414,16 +213,7 @@ public class TopViewNoLinkageAnimHelper { } isTopViewOut = true; NoMapTopViewShaderHelper.getInstance().hideShader(); - constraintSet.clone(topMotionLayout); - - constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP); - constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.BOTTOM, - R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP); - TransitionManager.beginDelayedTransition(topMotionLayout, transition); - checkCameraModePosition(false); - - constraintSet.applyTo(topMotionLayout); - + topContainerNoLinkage.animate().translationY(-topContainerNoLinkage.getTranslationY()).setListener(mainAnimListener).start(); int scene = Scene.AIMLESS; Logger.d(TAG, "hide top setMapCenterPointByScene: " + scene); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); @@ -431,61 +221,10 @@ public class TopViewNoLinkageAnimHelper { } } - public void hideNaviView() { - if (topMotionLayout == null) { - return; - } - - Logger.d(TAG, "hideNaviView====="); - setNaviVisibility(View.GONE); - remainDistanceGroup.setVisibility(View.GONE); - remainTimeGroup.setVisibility(View.GONE); - arriveTimeGroup.setVisibility(View.GONE); - int scene = 0; - if (isTopViewOut) { - scene = Scene.AIMLESS; - } else { - scene = Scene.AIMLESS_WITH_ROAD_EVENT; - } - Logger.d(TAG, "hide navi setMapCenterPointByScene: " + scene); - MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); - checkCameraModePosition(true); - } - - private void checkCameraModePosition(boolean isNeedClone) { - if (isNeedClone) { - constraintSet.clone(topMotionLayout); - } - if (naviBg.getVisibility() == View.VISIBLE) { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(), - ConstraintSet.BOTTOM, (int) getDimen(R.dimen.dp_30)); - } else { - if (isTopViewOut) { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(), - ConstraintSet.BOTTOM, - (int) getDimen(R.dimen.module_ext_north_goneMarginTop)); - } else { - constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, - R.id.module_entrance_id_top_container_no_linkage, - ConstraintSet.BOTTOM, - (int) getDimen(R.dimen.dp_30)); - } - } - if (isNeedClone) { - constraintSet.applyTo(topMotionLayout); - } - } - private float getDimen(int resId) { return (int) topMotionLayout.getContext().getResources().getDimensionPixelSize(resId); } - private int computeNaviMarginTop(int height) { - int result = (int) (height - (getDimen(R.dimen.module_ext_top_over_navi_height)) - getDimen(R.dimen.module_common_shadow_width_pos)); - Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result); - return result; - } - interface OnTopViewAnimSimpleListener { void onAnimStart(); @@ -496,17 +235,6 @@ public class TopViewNoLinkageAnimHelper { return viewCaches.contains(view); } - private void setNaviVisibility(int visibility) { - ivTurnIcon.setVisibility(visibility); - tvNextRoad.setVisibility(visibility); - tvNextDistance.setVisibility(visibility); - remainTimeGroup.setVisibility(visibility); - remainDistanceGroup.setVisibility(visibility); - arriveTimeGroup.setVisibility(visibility); - naviBg.setVisibility(visibility); - tvNextDistanceUnit.setVisibility(visibility); - tvTurnInfo.setVisibility(visibility); - } public void removeAllView() { Logger.d(TAG, "remove all view"); @@ -522,24 +250,12 @@ public class TopViewNoLinkageAnimHelper { } } topContainerNoLinkage.removeAllViews(); - hideNaviView(); MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, Scene.AIMLESS); } public void clear() { topMotionLayout = null; - remainTimeGroup = null; - remainDistanceGroup = null; - arriveTimeGroup = null; - naviBg = null; - ivTurnIcon = null; - tvNextDistance = null; - tvNextRoad = null; - tvNextDistanceUnit = null; - tvTurnInfo = null; topContainerNoLinkage = null; - cameraMode = null; - transition = null; } public void enterVrMode(){ @@ -551,4 +267,46 @@ public class TopViewNoLinkageAnimHelper { removeAllView(); topContainerNoLinkage.getLayoutParams().width = LayoutParams.MATCH_PARENT; } + + private final Animator.AnimatorListener mainAnimListener = new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + Logger.d(TAG, "onMainAnimEnd: " + currentAnimatingView); + IMogoTopViewStatusListener listener; + if (isTopViewOut) { + int lastCount = topContainerNoLinkage.getChildCount(); + for (int i = 0; i < lastCount; i++) { + View child = topContainerNoLinkage.getChildAt(i); + viewCaches.remove(child); + listener = statusListenerMap.remove(child); + if (listener != null) { + listener.onViewRemoved(child); + } + } + topContainerNoLinkage.removeAllViews(); + currentAnimatingView = null; + } else { + listener = statusListenerMap.get(currentAnimatingView); + if (listener != null) { + listener.onViewAdded(currentAnimatingView); + } + } + + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }; }