From 4e339c475e1b64dc86d83d0e50ff093fdc5938eb Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 17 Jun 2020 15:43:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9top=20view=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=90=8C=E6=97=B6=E5=8F=AA=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E4=B8=80=E4=B8=AAview=EF=BC=8C=E4=B8=8D=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=8F=A0=E5=8A=A0=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 56 +++++++++---------- .../extensions/entrance/EntranceFragment.java | 20 ++++++- .../extensions/utils/TopViewAnimHelper.java | 37 +++++++++++- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/gradle.properties b/gradle.properties index 47ab02a6d0..ce2fec7504 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,37 +24,37 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=false +RELEASE=true # 模块版本 ## 工程内模块 -MOGO_COMMONS_VERSION=1.2.1.2 -MOGO_UTILS_VERSION=1.2.1.2 -MAP_AMAP_VERSION=1.2.1.2 -MAP_AUTONAVI_VERSION=1.2.1.2 -MOGO_MAP_VERSION=1.2.1.2 -MOGO_MAP_API_VERSION=1.2.1.2 -MOGO_SERVICE_VERSION=1.2.1.2 -MOGO_SERVICE_API_VERSION=1.2.1.2 -MOGO_CONNECTION_VERSION=1.2.1.2 -MOGO_MODULE_APPS_VERSION=1.2.1.2 -MOGO_MODULE_NAVI_VERSION=1.2.1.2 -MOGO_MODULE_SHARE_VERSION=1.2.1.2 -MOGO_MODULE_COMMON_VERSION=1.2.1.2 -MOGO_MODULE_MAIN_VERSION=1.2.1.2 -MOGO_MODULE_MAP_VERSION=1.2.1.2 -MOGO_MODULE_SERVICE_VERSION=1.2.1.2 -MOGO_MODULE_EXTENSIONS_VERSION=1.2.1.2 -MOGO_MODULE_SEARCH_VERSION=1.2.1.2 -MOGO_MODULE_BACK_VERSION=1.2.1.2 -MOGO_MODULE_GPS_SIMULATOR_VERSION=1.2.1.2 -MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.2.1.2 -MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.2.1.2 -MOGO_MODULE_AUTHORIZE_VERSION=1.2.1.2 -MOGO_MODULE_GUIDE_VERSION=1.2.1.2 -MOGO_MODULE_MEDIA_VERSION=1.2.1.2 +MOGO_COMMONS_VERSION=1.2.1.3 +MOGO_UTILS_VERSION=1.2.1.3 +MAP_AMAP_VERSION=1.2.1.3 +MAP_AUTONAVI_VERSION=1.2.1.3 +MOGO_MAP_VERSION=1.2.1.3 +MOGO_MAP_API_VERSION=1.2.1.3 +MOGO_SERVICE_VERSION=1.2.1.3 +MOGO_SERVICE_API_VERSION=1.2.1.3 +MOGO_CONNECTION_VERSION=1.2.1.3 +MOGO_MODULE_APPS_VERSION=1.2.1.3 +MOGO_MODULE_NAVI_VERSION=1.2.1.3 +MOGO_MODULE_SHARE_VERSION=1.2.1.3 +MOGO_MODULE_COMMON_VERSION=1.2.1.3 +MOGO_MODULE_MAIN_VERSION=1.2.1.3 +MOGO_MODULE_MAP_VERSION=1.2.1.3 +MOGO_MODULE_SERVICE_VERSION=1.2.1.3 +MOGO_MODULE_EXTENSIONS_VERSION=1.2.1.3 +MOGO_MODULE_SEARCH_VERSION=1.2.1.3 +MOGO_MODULE_BACK_VERSION=1.2.1.3 +MOGO_MODULE_GPS_SIMULATOR_VERSION=1.2.1.3 +MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.2.1.3 +MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.2.1.3 +MOGO_MODULE_AUTHORIZE_VERSION=1.2.1.3 +MOGO_MODULE_GUIDE_VERSION=1.2.1.3 +MOGO_MODULE_MEDIA_VERSION=1.2.1.3 -MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.4 -MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.4 +MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.5 +MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.5 ## 工程外部模块 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 9648fe49a8..f49414dd40 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 @@ -49,7 +49,6 @@ import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.AppUtils; import com.mogo.utils.LaunchUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.UiThreadHandler; @@ -184,6 +183,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private List< View > demoCache = new ArrayList<>(); + private int[] heights = new int[]{100,200,300}; + @Override protected void initViews() { mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( getContext() ); @@ -200,9 +201,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // // todo 测试动画 // View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null); // TextView tv = v.findViewById(R.id.tvIndex); -// tv.setText(demoCache.size() + ": " + v); +// Random random = new Random(); +// int height = heights[random.nextInt(3)]; +// tv.setText(demoCache.size()+" height: "+height + ": " + v); // demoCache.add(v); -// mApis.getTopViewManager().addView(v, new IMogoTopViewStatusListener() { +// LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, height); +// mApis.getTopViewManager().addView(v, params,new IMogoTopViewStatusListener() { // @Override // public void onViewAdded(View view) { // Logger.d(TAG, "onViewAdded: " + view); @@ -212,6 +216,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // public void onViewRemoved(View view) { // Logger.d(TAG, "onViewRemoved: " + view); // } +// +// @Override +// public void beforeViewAddAnim(View view) { +// Logger.d(TAG, "beforeViewAddAnim: " + view); +// } +// +// @Override +// public void beforeViewRemoveAnim(View view) { +// Logger.d(TAG, "beforeViewRemoveAnim: " + view); +// } // }); // 原始逻辑 showShareDialog(); 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 60c72a3fa6..e938b8e751 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 @@ -8,6 +8,7 @@ import android.transition.TransitionManager; import android.util.ArrayMap; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import android.view.animation.BounceInterpolator; import android.view.animation.OvershootInterpolator; import android.widget.ImageView; @@ -181,6 +182,31 @@ public class TopViewAnimHelper { if (topContainer.getChildCount() > 0) { // 顶部view已经有了内容,新增内容无需整体布局变化,只是新增布局加个动画 viewCaches.add(view); + + // 生硬的删掉上一个view + View lastView = topContainer.getChildAt(0); + if (statusListenerMap.get(lastView) != null) { + statusListenerMap.get(lastView).beforeViewRemoveAnim(lastView); + } + topContainer.removeView(lastView); + viewCaches.remove(lastView); + if (statusListenerMap.get(lastView) != null) { + statusListenerMap.remove(lastView).onViewRemoved(lastView); + } + // 如果高度变化,生硬的变化一下高度 + Logger.d(TAG,"container.height: "+topContainer.getHeight()); + if (topContainer.getHeight() != params.height) { + constraintSet.clone(topMotionLayout); + LayoutParams p = topContainer.getLayoutParams(); + p.height = params.height; + topContainer.setLayoutParams(p); + constraintSet.connect(naviBg.getId(), ConstraintSet.TOP, + R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP, + computeNaviMarginTop(params.height)); + constraintSet.applyTo(topMotionLayout); + Logger.d(TAG,"改变container的高度==="); + } + view.setTranslationY(-(params.height)); topContainer.addView(view, params); Logger.d(TAG, "顶部view已经有布局了,增加新增view滑入动画: " + view.getTranslationY() + " height:" + @@ -227,6 +253,7 @@ public class TopViewAnimHelper { statusListenerMap.get(view).beforeViewAddAnim(view); } topContainer.setChildAddedListener(child -> { + topContainer.setChildAddedListener(null); if (naviBg.getVisibility() == View.VISIBLE) { remainDistanceGroup.setVisibility(View.GONE); remainTimeGroup.setVisibility(View.GONE); @@ -261,7 +288,7 @@ public class TopViewAnimHelper { constraintSet.connect(naviBg.getId(), ConstraintSet.TOP, R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP, - (int) getDimen(R.dimen.dp_316)); + computeNaviMarginTop(params.height)); } constraintSet.applyTo(topMotionLayout); ivTurnIcon.getLayoutParams().height = @@ -455,7 +482,7 @@ public class TopViewAnimHelper { (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46)); constraintSet.connect(naviBg.getId(), ConstraintSet.TOP, R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP, - (int) getDimen(R.dimen.dp_316)); + computeNaviMarginTop(topContainer.getHeight())); // ivTurnIcon.getLayoutParams().height = // (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height); // ivTurnIcon.getLayoutParams().width = @@ -524,6 +551,12 @@ public class TopViewAnimHelper { return (int) topMotionLayout.getContext().getResources().getDimension(resId); } + private int computeNaviMarginTop(int height) { + int result = (int) (height - (getDimen(R.dimen.dp_350) - getDimen(R.dimen.dp_316))); + Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result); + return result; + } + interface OnTopViewAnimSimpleListener { void onAnimStart();