From 92f91f66fbd2db980668387912a26a8a976b7821 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 26 May 2020 17:51:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B6=E9=83=A8view?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8F=8A=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/launcher/MogoApplication.java | 2 +- gradle.properties | 48 ++-- .../extensions/entrance/EntranceFragment.java | 21 ++ .../extensions/utils/TopViewAnimHelper.java | 220 ++++++++++++------ .../extensions/utils/TopViewManager.java | 34 ++- .../src/main/res/layout/demo_top.xml | 13 ++ .../res/layout/module_ext_layout_entrance.xml | 2 +- .../src/main/res/values-xhdpi/dimens.xml | 2 +- .../windowview/IMogoTopViewManager.java | 27 ++- 9 files changed, 269 insertions(+), 100 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index b2c9f7f484..3b339d9a2d 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -55,7 +55,7 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule(new MogoModule(AdCardConstants.TAG, AdCardConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE)); MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); -// MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); + MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); diff --git a/gradle.properties b/gradle.properties index 75c867a601..a8b8b32956 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,34 +27,34 @@ PASSWORD=xintai2018 RELEASE=false # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.1.0.7 -MOGO_UTILS_VERSION=1.1.0.7 -MAP_AMAP_VERSION=1.1.0.7 -MOGO_MAP_VERSION=1.1.0.7 -MOGO_MAP_API_VERSION=1.1.0.7 -MOGO_SERVICE_VERSION=1.1.0.7 -MOGO_SERVICE_API_VERSION=1.1.0.7 -MOGO_CONNECTION_VERSION=1.1.0.7 -MOGO_MODULE_APPS_VERSION=1.1.0.7 -MOGO_MODULE_NAVI_VERSION=1.1.0.7 -MOGO_MODULE_SHARE_VERSION=1.1.0.7 -MOGO_MODULE_COMMON_VERSION=1.1.0.7 -MOGO_MODULE_MAIN_VERSION=1.1.0.7 -MOGO_MODULE_MAP_VERSION=1.1.0.7 -MOGO_MODULE_SERVICE_VERSION=1.1.0.7 -MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.7 -MOGO_MODULE_SEARCH_VERSION=1.1.0.7 -MOGO_MODULE_BACK_VERSION=1.1.0.7 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.7 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.7 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.7 -MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.7 -MOGO_MODULE_GUIDE_VERSION=1.1.0.7 +MOGO_COMMONS_VERSION=1.1.0.8 +MOGO_UTILS_VERSION=1.1.0.8 +MAP_AMAP_VERSION=1.1.0.8 +MOGO_MAP_VERSION=1.1.0.8 +MOGO_MAP_API_VERSION=1.1.0.8 +MOGO_SERVICE_VERSION=1.1.0.8 +MOGO_SERVICE_API_VERSION=1.1.0.8 +MOGO_CONNECTION_VERSION=1.1.0.8 +MOGO_MODULE_APPS_VERSION=1.1.0.8 +MOGO_MODULE_NAVI_VERSION=1.1.0.8 +MOGO_MODULE_SHARE_VERSION=1.1.0.8 +MOGO_MODULE_COMMON_VERSION=1.1.0.8 +MOGO_MODULE_MAIN_VERSION=1.1.0.8 +MOGO_MODULE_MAP_VERSION=1.1.0.8 +MOGO_MODULE_SERVICE_VERSION=1.1.0.8 +MOGO_MODULE_EXTENSIONS_VERSION=1.1.0.8 +MOGO_MODULE_SEARCH_VERSION=1.1.0.8 +MOGO_MODULE_BACK_VERSION=1.1.0.8 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.1.0.8 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.1.0.8 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.1.0.8 +MOGO_MODULE_AUTHORIZE_VERSION=1.1.0.8 +MOGO_MODULE_GUIDE_VERSION=1.1.0.8 ## 工程外部模块 # 探路 -MOGO_MODULE_TANLU_VERSION=1.0.6-SNAPSHOT +MOGO_MODULE_TANLU_VERSION=1.0.5-SNAPSHOT # 车聊聊 CARCHATTING_VERSION=1.0.4-SNAPSHOT # 车聊聊接口 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 6670b8d022..fd6377a2e2 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 @@ -7,7 +7,9 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -54,7 +56,9 @@ import com.mogo.utils.ResourcesHelper; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import static com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE; @@ -181,6 +185,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent return R.layout.module_ext_layout_entrance; } + private List demoCache = new ArrayList<>(); + @Override protected void initViews() { mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( getContext() ); @@ -196,6 +202,13 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mUpload = findViewById( R.id.module_entrance_id_upload ); mUploading = findViewById( R.id.module_entrance_id_uploading ); mUploadRoadCondition.setOnClickListener( view -> { +// // todo 测试动画 +// View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null); +// TextView tv = v.findViewById(R.id.tvIndex); +// tv.setText(demoCache.size() + ""); +// demoCache.add(v); +// mApis.getTopViewManager().addView(v); + // 原始逻辑 isClickShare = true; if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); @@ -222,6 +235,14 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location ); mMove2CurrentLocation.setOnClickListener( view -> { +// // todo 测试动画 +// if(demoCache.size()>0) { +// View v = demoCache.remove(demoCache.size() - 1); +// boolean isViewAdded = mApis.getTopViewManager().isViewAdded(v); +// Logger.d(TAG, "isViewAdded===" + isViewAdded); +// mApis.getTopViewManager().removeView(v); +// } + // 原始逻辑 final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); if ( location != null ) { if ( !mMogoStatusManager.isV2XShow() ) { 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 4547548674..4c75e753e0 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,5 +1,7 @@ package com.mogo.module.extensions.utils; +import android.animation.Animator; +import android.animation.ObjectAnimator; import android.transition.AutoTransition; import android.transition.Transition; import android.transition.TransitionManager; @@ -13,9 +15,15 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; import androidx.constraintlayout.widget.Group; +import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.module.common.map.MapCenterPointStrategy; +import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.R; import com.mogo.utils.logger.Logger; +import java.util.ArrayList; +import java.util.List; + /** * 顶部动画帮助类 @@ -23,6 +31,7 @@ import com.mogo.utils.logger.Logger; * @author tongchenfei */ public class TopViewAnimHelper { + private static final String TAG = "TopViewAnimHelper"; private ConstraintLayout topMotionLayout; private Group naviGroup, remainTimeGroup, remainDistanceGroup, arriveTimeGroup; @@ -53,6 +62,12 @@ public class TopViewAnimHelper { return instance; } + private IMogoMapUIController mogoMapUIController; + + public void setIMogoMapUIController(IMogoMapUIController mogoMapUIController) { + this.mogoMapUIController = mogoMapUIController; + } + public void init(ConstraintLayout rootView) { init(rootView, null); } @@ -109,96 +124,156 @@ public class TopViewAnimHelper { } private boolean isTopViewOut = true; + private List viewCaches = new ArrayList<>(); public void startTopInAnim(View view, ViewGroup.LayoutParams params) { - Logger.d("TopViewAnimHelper", "startTopInAnim====="); + Logger.d(TAG, "startTopInAnim====="+isTopViewOut); if (view == null) { throw new IllegalArgumentException("method addTopView params view is null"); } if (params == null) { throw new IllegalArgumentException("method addTopView params LayoutParams is null"); } - if (isTopViewOut) { + if (!viewCaches.contains(view)) { + // 判断此view是否已经增加到了顶部view,如果增加过就不增加了 + Logger.d(TAG, "开始执行"); isTopViewOut = false; + if (topContainer.getChildCount() > 0) { + // 顶部view已经有了内容,新增内容无需整体布局变化,只是新增布局加个动画 + viewCaches.add(view); + view.setTranslationY(-(params.height)); + topContainer.addView(view, params); + Logger.d(TAG, "顶部view已经有布局了,增加新增view滑入动画: " + view.getTranslationY() + " height:" + + " " + view.getHeight() + " paramsHeight: " + params.height); + view.animate().translationY(0).setDuration(500).start(); + } else { + // 顶部view还没有内容,需要整体下移 + viewCaches.add(view); + topContainer.addView(view, params); + constraintSet.clone(topMotionLayout); - topContainer.addView(view, params); + 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; - 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); - checkCameraModePosition(false); - if (naviGroup.getVisibility() == View.VISIBLE) { - // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() - // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 - constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM, - ivTurnIcon.getId(), ConstraintSet.BOTTOM); - constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM); - constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BASELINE, - tvNextDistance.getId(), ConstraintSet.BASELINE); - constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, - R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT, - (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46)); + TransitionManager.beginDelayedTransition(topMotionLayout, transition); + checkCameraModePosition(false); + if (naviGroup.getVisibility() == View.VISIBLE) { + // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() + // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 + constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM, + ivTurnIcon.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BASELINE, + tvNextDistance.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT, + (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46)); + } + constraintSet.applyTo(topMotionLayout); + if (naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.GONE); + remainTimeGroup.setVisibility(View.GONE); + arriveTimeGroup.setVisibility(View.GONE); + } + ivTurnIcon.getLayoutParams().height = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height); + 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 scene = 0; + if(naviGroup.getVisibility() == View.VISIBLE){ + scene = Scene.NAVI_WITH_ROAD_EVENT; + }else{ + scene = Scene.AIMLESS_WITH_ROAD_EVENT; + } + Logger.d(TAG, "show top setMapCenterPointByScene: " + scene); + MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); } - constraintSet.applyTo(topMotionLayout); - if (naviGroup.getVisibility() == View.VISIBLE) { - remainDistanceGroup.setVisibility(View.GONE); - remainTimeGroup.setVisibility(View.GONE); - arriveTimeGroup.setVisibility(View.GONE); - } - ivTurnIcon.getLayoutParams().height = - (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height); - 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); } } - public void startTopOutAnim() { + public void startTopOutAnim(View view) { Logger.d("TopViewAnimHelper", "startTopOutAnim====="); if (!isTopViewOut) { - isTopViewOut = true; - 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); - checkCameraModePosition(false); + if(topContainer.getChildCount() >1){ + // 顶部view包含多个view,只推出当前view,不进行整体上移 + Logger.d(TAG, "小view退出: " + view.getTranslationY() + " height: " + view.getHeight()); + view.animate().translationY(-(view.getHeight())).setDuration(500).setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { - if (naviGroup.getVisibility() == View.VISIBLE) { - // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() - // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 - constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM); - constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE); - constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM, - ivTurnIcon.getId(), ConstraintSet.BOTTOM); - constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, - tvNextDistance.getId(), ConstraintSet.LEFT, - 0); + } + + @Override + public void onAnimationEnd(Animator animation) { + viewCaches.remove(view); + topContainer.removeView(view); + } + + @Override + public void onAnimationCancel(Animator animation) { + viewCaches.remove(view); + topContainer.removeView(view); + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }).start(); + }else { + // 顶部view仅剩一个view,需要整体上移 + isTopViewOut = true; + 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); + checkCameraModePosition(false); + + if (naviGroup.getVisibility() == View.VISIBLE) { + // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo() + // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知 + constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM); + constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM, + ivTurnIcon.getId(), ConstraintSet.BOTTOM); + constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT, + tvNextDistance.getId(), ConstraintSet.LEFT, + 0); + } + constraintSet.applyTo(topMotionLayout); + if (naviGroup.getVisibility() == View.VISIBLE) { + remainDistanceGroup.setVisibility(View.VISIBLE); + remainTimeGroup.setVisibility(View.VISIBLE); + arriveTimeGroup.setVisibility(View.VISIBLE); + } + ivTurnIcon.getLayoutParams().height = + (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height); + 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 scene = 0; + if(naviGroup.getVisibility() == View.VISIBLE){ + scene = Scene.NAVI; + }else{ + scene = Scene.AIMLESS; + } + Logger.d(TAG, "hide top setMapCenterPointByScene: " + scene); + MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); } - constraintSet.applyTo(topMotionLayout); - if (naviGroup.getVisibility() == View.VISIBLE) { - remainDistanceGroup.setVisibility(View.VISIBLE); - remainTimeGroup.setVisibility(View.VISIBLE); - arriveTimeGroup.setVisibility(View.VISIBLE); - } - ivTurnIcon.getLayoutParams().height = - (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height); - 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); } } public void showNaviView() { Logger.d("TopViewAnimHelper", "showNaviView====="); naviGroup.setVisibility(View.VISIBLE); + int scene = 0; if (isTopViewOut) { remainDistanceGroup.setVisibility(View.VISIBLE); remainTimeGroup.setVisibility(View.VISIBLE); @@ -220,6 +295,7 @@ public class TopViewAnimHelper { // (int) topMotionLayout.getContext().getResources().getDimension(R.dimen // .module_ext_navi_info_panel_height); constraintSet.applyTo(topMotionLayout); + scene = Scene.NAVI_WITH_ROAD_EVENT; } else { remainDistanceGroup.setVisibility(View.GONE); remainTimeGroup.setVisibility(View.GONE); @@ -242,8 +318,10 @@ public class TopViewAnimHelper { // (int) topMotionLayout.getContext().getResources().getDimension(R.dimen // .module_ext_navi_info_panel_small_height); constraintSet.applyTo(topMotionLayout); + scene = Scene.NAVI; } - + Logger.d(TAG, "navi show setMapCenterPointByScene: " + scene); + MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); checkCameraModePosition(true); } @@ -253,6 +331,14 @@ public class TopViewAnimHelper { remainDistanceGroup.setVisibility(View.GONE); remainTimeGroup.setVisibility(View.GONE); arriveTimeGroup.setVisibility(View.GONE); + int scene = 0; + if(isTopViewOut){ + scene = Scene.AIMLESS_WITH_ROAD_EVENT; + }else{ + scene = Scene.AIMLESS; + } + Logger.d(TAG, "hide navi setMapCenterPointByScene: " + scene); + MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene); checkCameraModePosition(true); } @@ -289,4 +375,8 @@ public class TopViewAnimHelper { void onAnimEnd(); } + + public boolean isViewAdded(View view) { + return viewCaches.contains(view); + } } 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 index 54a9485d89..bab6447d35 100644 --- 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 @@ -5,6 +5,7 @@ import android.view.View; import android.view.ViewGroup; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.module.extensions.R; import com.mogo.service.MogoServicePaths; import com.mogo.service.windowview.IMogoTopViewManager; @@ -16,19 +17,40 @@ import com.mogo.service.windowview.IMogoTopViewManager; @Route(path = MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER) public class TopViewManager implements IMogoTopViewManager { +// @Override +// public void addTopView(View view, ViewGroup.LayoutParams params) { +// TopViewAnimHelper.getInstance().startTopInAnim(view, params); +// } +// +// @Override +// public void removeTopView() { +// TopViewAnimHelper.getInstance().startTopOutAnim(); +// } + + private Context context; @Override - public void addTopView(View view, ViewGroup.LayoutParams params) { + public void init(Context context) { + this.context = context; + } + + @Override + public void addView(View view) { + addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + (int) context.getResources().getDimension(R.dimen.dp_350))); + } + + @Override + public void addView(View view, ViewGroup.LayoutParams params) { TopViewAnimHelper.getInstance().startTopInAnim(view, params); } @Override - public void removeTopView() { - TopViewAnimHelper.getInstance().startTopOutAnim(); + public void removeView(View view) { + TopViewAnimHelper.getInstance().startTopOutAnim(view); } - @Override - public void init(Context context) { - + public boolean isViewAdded(View view) { + return TopViewAnimHelper.getInstance().isViewAdded(view); } } 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 index 777cc6b5d5..31de59022d 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/demo_top.xml @@ -5,6 +5,19 @@ android:layout_height="@dimen/dp_350" android:background="#000"> + + + + diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml index cfbe0d4486..b936d0a5eb 100644 --- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml @@ -125,7 +125,7 @@ 120px 120px 30px - 122px + 22px 28px \ No newline at end of file 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 index 195629734d..fcccddf435 100644 --- 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 @@ -9,6 +9,29 @@ import com.alibaba.android.arouter.facade.template.IProvider; * 管理1/2屏界面的增添,为了配合导航展示新增接口 */ public interface IMogoTopViewManager extends IProvider { - void addTopView(View view, ViewGroup.LayoutParams params); - void removeTopView(); + /** + * 在1/2屏添加一个view,如果没显示,会有动画 + * 给了一个默认的LayoutParams + */ + void addView(View view); + + /** + * 在1/2屏添加一个view,如果没显示,会有动画 + * @param view + * @param params + */ + void addView(View view, ViewGroup.LayoutParams params); + + /** + * 移除view,如果是最后一个view,会有移除动画 + * @param view + */ + void removeView(View view); + + /** + * 这个view是否已经被添加进了顶部布局 + * @param view + * @return + */ + boolean isViewAdded(View view); }