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 2905e86a9a..ff07cb08e7 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
@@ -1,5 +1,6 @@
package com.mogo.module.extensions.entrance;
+import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
@@ -10,7 +11,9 @@ import android.transition.AutoTransition;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.util.Log;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
@@ -112,7 +115,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
private IMogoAuthorizeModuleManager mIMogoAuthorizeModuleManager;
private IMogoStatusManager mStatusManager;
- private TopViewAnimHelper topViewAnimHelper;
/**
* 搜索莫模块
@@ -199,9 +201,13 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mUploadRoadCondition.setOnClickListener( view -> {
// todo 测试动画
if (!naviToggle) {
- topViewAnimHelper.showNaviView();
+ View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null);
+ ViewGroup.LayoutParams params =
+ new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ (int) getResources().getDimension(R.dimen.dp_350));
+ mApis.getTopViewManager().addTopView(v, params);
}else{
- topViewAnimHelper.hideNaviView();
+ mApis.getTopViewManager().removeTopView();
}
naviToggle = !naviToggle;
// 原始逻辑
@@ -230,9 +236,9 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mMove2CurrentLocation.setOnClickListener( view -> {
// todo 测试动画
if (!toggle) {
- topViewAnimHelper.startTopInAnim();
+ TopViewAnimHelper.getInstance().showNaviView();
}else{
- topViewAnimHelper.startTopOutAnim();
+ TopViewAnimHelper.getInstance().hideNaviView();
}
toggle = !toggle;
// 原始逻辑
@@ -251,7 +257,7 @@ 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);
+ TopViewAnimHelper.getInstance().init(rootView);
}
mExitNavi = findViewById( R.id.module_entrance_id_exit_navi );
@@ -278,13 +284,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mCameraMode = findViewById( R.id.module_ext_id_north );
mCameraMode.setOnClickListener( view -> {
- if ( mCameraMode.isSelected() ) {
- mMApUIController.changeMapMode( EnumMapUI.CarUp_2D );
- } else {
- mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D );
- }
- mCameraMode.setSelected( !mCameraMode.isSelected() );
- mCameraMode.setText( getString( mCameraMode.isSelected() ? R.string.mode_car_up : R.string.mode_north_up ) );
+ // todo 测试动画
+ TopViewAnimHelper.getInstance().debug();
+ // 原始逻辑
+// if ( mCameraMode.isSelected() ) {
+// mMApUIController.changeMapMode( EnumMapUI.CarUp_2D );
+// } else {
+// mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D );
+// }
+// mCameraMode.setSelected( !mCameraMode.isSelected() );
+// mCameraMode.setText( getString( mCameraMode.isSelected() ? R.string.mode_car_up : R.string.mode_north_up ) );
} );
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
index 93ef407b60..9d63dbd215 100644
--- 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
@@ -1,10 +1,13 @@
package com.mogo.module.extensions.utils;
+import android.annotation.SuppressLint;
import android.content.res.Resources;
import android.transition.AutoTransition;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -15,6 +18,8 @@ import androidx.constraintlayout.widget.Group;
import com.mogo.module.extensions.R;
import com.mogo.utils.logger.Logger;
+import java.util.Random;
+
/**
* 顶部动画帮助类
@@ -30,22 +35,40 @@ public class TopViewAnimHelper {
private ImageView ivTurnIcon;
private TextView tvNextDistance;
private TextView tvNextRoad;
+ private FrameLayout topContainer;
private ConstraintSet constraintSet = new ConstraintSet();
private Transition transition = new AutoTransition();
private TextView cameraMode;
- public TopViewAnimHelper(ConstraintLayout rootView) {
- this(rootView, null);
+ private TopViewAnimHelper() {
}
- public TopViewAnimHelper(ConstraintLayout rootView, OnTopViewAnimSimpleListener listener) {
+ private volatile static TopViewAnimHelper instance = null;
+
+ public static TopViewAnimHelper getInstance() {
+ if (instance == null) {
+ synchronized (TopViewAnimHelper.class) {
+ if (instance == null) {
+ instance = new TopViewAnimHelper();
+ }
+ }
+ }
+ return instance;
+ }
+
+ public void init(ConstraintLayout rootView) {
+ init(rootView, null);
+ }
+
+ public void init(ConstraintLayout rootView, OnTopViewAnimSimpleListener listener) {
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);
+ topContainer = rootView.findViewById(R.id.module_entrance_id_top_container);
ivTurnIcon = rootView.findViewById(R.id.module_map_id_navi_next_info_road_turn_icon);
tvNextDistance = rootView.findViewById(R.id.module_map_id_navi_next_info_distance);
@@ -62,6 +85,9 @@ public class TopViewAnimHelper {
@Override
public void onTransitionEnd(Transition transition) {
+ if (isTopViewOut) {
+ topContainer.removeAllViews();
+ }
if (listener != null) {
listener.onAnimEnd();
}
@@ -88,10 +114,13 @@ public class TopViewAnimHelper {
private boolean isTopViewOut = true;
- public void startTopInAnim() {
+ public void startTopInAnim(View view, ViewGroup.LayoutParams params) {
Logger.d("TopViewAnimHelper", "startTopInAnim=====");
if (isTopViewOut) {
isTopViewOut = false;
+
+ topContainer.addView(view, params);
+
constraintSet.clone(topMotionLayout);
constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1;
@@ -186,7 +215,8 @@ public class TopViewAnimHelper {
// ivTurnIcon.getLayoutParams().width =
// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_width);
// naviBg.getLayoutParams().height =
-// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_height);
+// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen
+// .module_ext_navi_info_panel_height);
constraintSet.applyTo(topMotionLayout);
} else {
remainDistanceGroup.setVisibility(View.GONE);
@@ -207,7 +237,8 @@ public class TopViewAnimHelper {
// ivTurnIcon.getLayoutParams().width =
// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_width);
// naviBg.getLayoutParams().height =
-// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height);
+// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen
+// .module_ext_navi_info_panel_small_height);
constraintSet.applyTo(topMotionLayout);
}
@@ -233,7 +264,8 @@ public class TopViewAnimHelper {
} else {
if (isTopViewOut) {
constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.BOTTOM, (int) getDimen(R.dimen.module_ext_north_goneMarginTop));
+ ConstraintSet.BOTTOM,
+ (int) getDimen(R.dimen.module_ext_north_goneMarginTop));
} else {
constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP,
R.id.module_entrance_id_top_container,
@@ -255,4 +287,12 @@ public class TopViewAnimHelper {
void onAnimEnd();
}
+
+ private int[] iconRes = new int[]{R.drawable.ic_1, R.drawable.ic_2, R.drawable.ic_3};
+
+ public void debug() {
+ Random random = new Random();
+ int index = random.nextInt(3);
+ ivTurnIcon.setImageResource(iconRes[index]);
+ }
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java
new file mode 100644
index 0000000000..05dc6052c7
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java
@@ -0,0 +1,40 @@
+package com.mogo.module.extensions.utils;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.windowview.IMogoTopViewManager;
+
+/**
+ * 顶部1/2界面管理
+ *
+ * @author tongchenfei
+ */
+@Route(path = MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER)
+public class TopViewManager implements IMogoTopViewManager {
+
+ @Override
+ public void addTopView(View view, ViewGroup.LayoutParams params) {
+ if (view == null) {
+ throw new IllegalArgumentException("method addTopView params view is null");
+ }
+ if (params == null) {
+ throw new IllegalArgumentException("method addTopView params LayoutParams is null");
+ }
+ TopViewAnimHelper.getInstance().startTopInAnim(view, params);
+ }
+
+ @Override
+ public void removeTopView() {
+ TopViewAnimHelper.getInstance().startTopOutAnim();
+ }
+
+
+ @Override
+ public void init(Context context) {
+
+ }
+}
diff --git a/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml b/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml
new file mode 100644
index 0000000000..777cc6b5d5
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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 e985dd586c..7b398b6a9d 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
@@ -16,8 +16,7 @@
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
index 346667562f..ba87481b25 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
@@ -23,6 +23,7 @@ import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.strategy.IMogoRefreshStrategyController;
+import com.mogo.service.windowview.IMogoTopViewManager;
import com.mogo.service.windowview.IMogoWindowManager;
/**
@@ -180,4 +181,10 @@ public interface IMogoServiceApis extends IProvider {
* @return
*/
IMogoEntranceButtonController getEntranceButtonController();
+
+ /**
+ * 获取顶部1/2屏界面管理类
+ * @return
+ */
+ IMogoTopViewManager getTopViewManager();
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
index ca78173ea3..59bfa910b0 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
@@ -166,4 +166,9 @@ public class MogoServicePaths {
*/
@Deprecated
public static final String PATH_ENTRANCE_BUTTON_API = "/entrancebutton/api";
+
+ /**
+ * 顶部1/2屏管理
+ */
+ public static final String PATH_EXTENSIONS_TOP_VIEW_MANAGER = "/topview/api";
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java
new file mode 100644
index 0000000000..195629734d
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java
@@ -0,0 +1,14 @@
+package com.mogo.service.windowview;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.alibaba.android.arouter.facade.template.IProvider;
+
+/**
+ * 管理1/2屏界面的增添,为了配合导航展示新增接口
+ */
+public interface IMogoTopViewManager extends IProvider {
+ void addTopView(View view, ViewGroup.LayoutParams params);
+ void removeTopView();
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
index 462e799b7a..91363abc52 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
@@ -32,6 +32,7 @@ import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.strategy.IMogoRefreshStrategyController;
+import com.mogo.service.windowview.IMogoTopViewManager;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.utils.logger.Logger;
@@ -159,7 +160,12 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoEntranceButtonController.class, MogoServicePaths.PATH_ENTRANCE_BUTTON_API );
}
- private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
+ @Override
+ public IMogoTopViewManager getTopViewManager() {
+ return getApiInstance(IMogoTopViewManager.class,MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER);
+ }
+
+ private static < T extends IProvider > T getApiInstance(Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
synchronized ( sLock ) {