From a6ada8abfed32af580e0a8384c1a197055505fe4 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Thu, 21 May 2020 17:18:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=88=B6=E5=AE=9A?= =?UTF-8?q?=E6=96=B9=E6=A1=88=EF=BC=8C=E4=BD=BF=E7=94=A8=E8=BF=87=E5=BA=A6?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- app/build.gradle | 2 +- .../com/mogo/launcher/MogoApplication.java | 2 +- config.gradle | 2 +- .../extensions/entrance/EntranceFragment.java | 112 ++++- .../extensions/navi/BaseNaviInfoView2.java | 170 +++++++ .../module/extensions/navi/NaviInfoView2.java | 66 +++ .../res/layout/module_ext_layout_entrance.xml | 263 ++++++++++- .../module_map_layout_navi_info_panel_2.xml | 196 ++++++++ .../src/main/res/values-ldpi/dimens.xml | 3 + .../src/main/res/values-xhdpi/dimens.xml | 4 + .../main/res/xml/module_ext_top_motion.xml | 442 ++++++++++++++++++ .../res/xml/module_ext_top_no_navi_motion.xml | 35 ++ .../main/windowview/MogoWindowManager.java | 5 + .../module/main/windowview/TopViewHolder.java | 15 + .../windowview/IMogoWindowManager.java | 6 + 16 files changed, 1278 insertions(+), 47 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java create mode 100644 modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml create mode 100644 modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml create mode 100644 modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml create mode 100644 modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9172cdd059..24a76c0c38 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ android { externalNativeBuild { ndk { // 设置支持的SO库架构 - abiFilters 'armeabi-v7a' + abiFilters 'armeabi-v7a','x86' } } } diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 3b339d9a2d..b2c9f7f484 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/config.gradle b/config.gradle index eaf710f48d..5e56778f48 100644 --- a/config.gradle +++ b/config.gradle @@ -13,7 +13,7 @@ ext { // androidx androidxappcompat : "androidx.appcompat:appcompat:1.0.2", androidxccorektx : "androidx.core:core-ktx:1.2.0", - androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-alpha5", + androidxconstraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-beta6", androidxmultidex : "androidx.multidex:multidex:2.0.1", androidxviewpager2 : "androidx.viewpager2:viewpager2:1.0.0", androidxrecyclerview : "androidx.recyclerview:recyclerview:1.1.0", 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 bc82a3cdc3..d8512e230d 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 @@ -6,6 +6,9 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.transition.AutoTransition; +import android.transition.Transition; +import android.transition.TransitionManager; import android.util.Log; import android.view.View; import android.widget.ImageView; @@ -14,6 +17,11 @@ import android.widget.TextView; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.constraintlayout.motion.widget.MotionLayout; +import androidx.constraintlayout.motion.widget.MotionScene; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.ConstraintSet; +import androidx.constraintlayout.widget.Group; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; @@ -37,6 +45,7 @@ import com.mogo.module.common.map.Scene; 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.share.ShareControl; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; @@ -79,7 +88,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private View mMove2CurrentLocation; - private NaviInfoView mNaviInfo; +// private NaviInfoView mNaviInfo; private TextView mExitNavi; @@ -101,6 +110,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private EntrancePresenter mEntrancePresenter; private IMogoAuthorizeModuleManager mIMogoAuthorizeModuleManager; private IMogoStatusManager mStatusManager; + private ConstraintLayout topMotionLayout; + private NaviInfoView2 naviInfoView; /** * 搜索莫模块 @@ -162,6 +173,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private Rect mDisplayOverviewBounds; + private boolean toggle = false; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_entrance; @@ -182,15 +195,50 @@ 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 -> { - isClickShare = true; - if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { - mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); - } else { - ShareControl.getInstance( getActivity() ).showDialog(); - traceData( "1" ); + // 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(); + }else{ + beginSet.applyTo(topMotionLayout); + naviInfoView.getLayoutParams().height = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_height); +// naviInfoView.transitionToStart(); } + toggle = !toggle; + // 原始逻辑 +// isClickShare = true; +// if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { +// mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); +// } else { +// ShareControl.getInstance( getActivity() ).showDialog(); +// traceData( "1" ); +// } } ); + 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 ); @@ -205,19 +253,43 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location ); mMove2CurrentLocation.setOnClickListener( view -> { - final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); - if ( location != null ) { - if ( !mMogoStatusManager.isV2XShow() ) { - mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); - mMApUIController.setLockZoom( 16 ); - mMApUIController.changeZoom( 16.0f ); - } - mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); - mMApUIController.recoverLockMode(); + // 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); + }else{ + beginSet.applyTo(topMotionLayout); } + toggle = !toggle; + // 原始逻辑 +// final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); +// if ( location != null ) { +// if ( !mMogoStatusManager.isV2XShow() ) { +// mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); +// mMApUIController.setLockZoom( 16 ); +// mMApUIController.changeZoom( 16.0f ); +// } +// mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); +// mMApUIController.recoverLockMode(); +// } } ); - mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); +// mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); mExitNavi = findViewById( R.id.module_entrance_id_exit_navi ); mExitNavi.setOnClickListener( view -> { if ( mMogoNavi != null ) { @@ -347,12 +419,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent if ( naviinfo == null ) { return; } - mNaviInfo.notifyChanged( naviinfo ); +// mNaviInfo.notifyChanged( naviinfo ); } @Override public void onStartNavi() { - mNaviInfo.setVisibility( View.VISIBLE ); +// mNaviInfo.setVisibility( View.VISIBLE ); mExitNavi.setVisibility( View.VISIBLE ); mMApUIController.changeMapMode( mCameraMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D ); MapCenterPointStrategy.setMapCenterPointBySceneAndDelay( mMApUIController, Scene.NAVI, 500, () -> { @@ -364,7 +436,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent @Override public void onStopNavi() { - mNaviInfo.setVisibility( View.GONE ); +// mNaviInfo.setVisibility( View.GONE ); mExitNavi.setVisibility( View.GONE ); mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D ); mDisplayOverview.setVisibility( View.GONE ); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java new file mode 100644 index 0000000000..a907ee7994 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java @@ -0,0 +1,170 @@ +package com.mogo.module.extensions.navi; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.motion.widget.MotionLayout; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.map.impl.amap.utils.IconTypeUtils; +import com.mogo.map.navi.MogoNaviInfo; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +/** + * @author congtaowang + * @since 2019-10-03 + *

+ * 描述 + */ +public abstract class BaseNaviInfoView2 extends ConstraintLayout { + + public BaseNaviInfoView2(Context context ) { + this( context, null ); + } + + public BaseNaviInfoView2(Context context, @Nullable AttributeSet attrs ) { + this( context, attrs, 0 ); + } + + public BaseNaviInfoView2(Context context, @Nullable AttributeSet attrs, int defStyleAttr ) { + super( context, attrs, defStyleAttr ); + } + + public void notifyChanged( MogoNaviInfo naviInfo ) { + + } + + protected void fillNextCrossTurning( TextView target, int nextIconType ) { + target.setText( "后" + IconTypeUtils.getNameByIconType( nextIconType ) ); + } + + protected void fillNextCrossIconType( ImageView target, int iconId ) { + if ( iconId > 0 ) { + target.setImageResource( iconId ); + } + } + + protected void fillNextCrossDistance( TextView target, TextView unit, int distance ) { + if ( distance >= 1000 ) { + target.setText( String.format( "%.1f", distance / 1000f ) ); + unit.setText( "km" ); + } else { + target.setText( distance + "" ); + unit.setText( "m" ); + } + } + + protected void fillFormatSurplusDistance( int m, StringBuilder builder ) { + if ( m >= 1000 ) { + builder.append( String.format( "%.1fkm", m / 1000f ) ); + } else { + builder.append( m ).append( "m" ); + } + } + + protected String getFormatSurplusDistance( int m ) { + if ( m >= 1000 ) { + mFormatSurplusDistanceUnit = "km"; + return String.format( "%.1f", m / 1000f ); + } else { + mFormatSurplusDistanceUnit = "m"; + return String.format( "%d", m ); + } + } + + private String mFormatSurplusDistanceUnit = ""; + + protected String getFormatSurplusDistanceUnit() { + return mFormatSurplusDistanceUnit; + } + + protected String getFormatSurplusTime( int seconds ) { + if ( seconds > 60 * 60 ) { + mFormatSurplusDistanceUnit = "h"; + return String.format( "%.1f", ( ( float ) seconds ) / 60 * 60 ); + } + + if ( seconds > 60 ) { + mFormatSurplusTimeUnit = "min"; + return String.format( "%.1f", ( ( float ) seconds ) / 60 ); + } + + mFormatSurplusTimeUnit = "s"; + return String.format( "%d", seconds ); + } + + private String mFormatSurplusTimeUnit = ""; + + protected String getFormatSurplusTimeUnit() { + return mFormatSurplusTimeUnit; + } + + protected void fillFormatTime( int seconds, StringBuilder builder ) { + int days = seconds / ( 24 * 60 * 60 ); + if ( days > 0 ) { + builder.append( days ).append( "天" ); + } + seconds -= days * 24 * 60 * 60; + int hours = seconds / ( 60 * 60 ); + if ( hours > 0 ) { + builder.append( hours ).append( "小时" ); + } + seconds -= hours * 60 * 60; + int min = seconds / 60; + builder.append( min > 1 ? min : 1 ).append( "分钟" ); + } + + protected String getArriveTime( int seconds ) { + int days = seconds / ( 24 * 60 * 60 ); + if ( days > 0 ) { + return String.format( "%d天后", days ); + } else { + seconds -= days * 24 * 60 * 60; + int hours = seconds / ( 60 * 60 ); + seconds -= hours * 60 * 60; + int min = seconds / 60; + Calendar calendar = Calendar.getInstance(); + int curHour = calendar.get( Calendar.HOUR_OF_DAY ); + int curMin = calendar.get( Calendar.MINUTE ); + if ( curHour + hours + ( curMin + min ) / 60 > 24 ) { + return "一天后"; + } else { + calendar.add( Calendar.HOUR_OF_DAY, hours ); + calendar.add( Calendar.MINUTE, min ); + SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm" ); + return dateFormat.format( calendar.getTime() ); + } + } + } + + protected void fillArriveTime( int seconds, StringBuilder builder ) { + + int days = seconds / ( 24 * 60 * 60 ); + if ( days > 0 ) { + builder.append( days ).append( "天后" ); + } else { + seconds -= days * 24 * 60 * 60; + int hours = seconds / ( 60 * 60 ); + seconds -= hours * 60 * 60; + int min = seconds / 60; + Calendar calendar = Calendar.getInstance(); + int curHour = calendar.get( Calendar.HOUR_OF_DAY ); + int curMin = calendar.get( Calendar.MINUTE ); + if ( curHour + hours + ( curMin + min ) / 60 > 24 ) { + builder.append( "一天后" ); + } else { + calendar.add( Calendar.HOUR_OF_DAY, hours ); + calendar.add( Calendar.MINUTE, min ); + SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm" ); + builder.append( dateFormat.format( calendar.getTime() ) ); + } + } + builder.append( "到达" ); + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java new file mode 100644 index 0000000000..8c6784453f --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java @@ -0,0 +1,66 @@ +package com.mogo.module.extensions.navi; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.constraintlayout.widget.Group; + +import com.mogo.module.extensions.R; + +/** + * 改变实现方式,使用MotionLayout来实现,方便增加动画 + * + * @author tongchenfei + */ +public class NaviInfoView2 extends BaseNaviInfoView2 { + private ImageView ivTurnIcon; + private View vBg; + private TextView tvNextDistance; + private TextView tvNextDistanceUnit; + private TextView tvNextTurnInfo; + private TextView tvNextRoad; + private Group remainDistanceGroup,remainTimeGroup, arriveTimeGroup; + + public NaviInfoView2(Context context) { + this(context,null); + } + + public NaviInfoView2(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public NaviInfoView2(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + ivTurnIcon = findViewById(R.id.module_map_id_navi_next_info_road_turn_icon); + vBg = findViewById(R.id.module_map_id_navi_bg); + tvNextDistance = findViewById(R.id.module_map_id_navi_next_info_distance); + tvNextRoad = findViewById(R.id.module_map_id_navi_next_info_road); + remainDistanceGroup = findViewById(R.id.remainDistanceGroup); + remainTimeGroup = findViewById(R.id.remainTimeGroup); + arriveTimeGroup = findViewById(R.id.arriveTimeGroup); + } + + /** + * 布局约束转成小的 + */ + public void setToSmall(){ + ivTurnIcon.getLayoutParams().width = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); + ivTurnIcon.getLayoutParams().height = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); + vBg.getLayoutParams().height = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height); + + } + + public void setToBig(){ + ivTurnIcon.getLayoutParams().width = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_width); + ivTurnIcon.getLayoutParams().height = + (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_width); + + } +} 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 77d36f91e1..c4743dc657 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 @@ -1,17 +1,237 @@ - + + + + + + + + + app:layout_constraintRight_toRightOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -38,10 +258,9 @@ android:background="@drawable/module_ext_dw_common_corner_bkg" android:gravity="center" android:orientation="vertical" - android:visibility="gone" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintTop_toBottomOf="@+id/module_entrance_id_navi_info_panel" - tools:visibility="visible"> + android:visibility="visible" + app:layout_constraintLeft_toLeftOf="@+id/mlNaviInfo" + app:layout_constraintTop_toBottomOf="@+id/mlNaviInfo"> + android:visibility="visible" /> + android:visibility="visible" /> + android:visibility="visible" /> + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml b/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml new file mode 100644 index 0000000000..729703ad4e --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/module_map_layout_navi_info_panel_2.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index b1ced3e457..2c9dfd1b3c 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -79,8 +79,11 @@ 1058px 210px + 144px 85px 85px + 56px + 56px 13px 13px 20px 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 b062b26c4a..9374230b56 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 @@ -76,9 +76,13 @@ 1058px 210px + 144px 159px 159px + 56px + 56px 24px + 83px 24px 40px 60px diff --git a/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml new file mode 100644 index 0000000000..99a7f0e15c --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_motion.xml @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml new file mode 100644 index 0000000000..8fda6c7123 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/xml/module_ext_top_no_navi_motion.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java index f7b69a8dd2..cc87d1dbc5 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/MogoWindowManager.java @@ -56,4 +56,9 @@ public class MogoWindowManager implements IMogoWindowManager { public void init( Context context ) { } + + @Override + public void addTopView(View view) { + + } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java new file mode 100644 index 0000000000..12bc772e07 --- /dev/null +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/windowview/TopViewHolder.java @@ -0,0 +1,15 @@ +package com.mogo.module.main.windowview; + +import android.view.View; + +/** + * 用来处理主屏上方1/2屏的view + */ +public class TopViewHolder { + public void init(){ + + } + public void addView(View view) { + + } +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java index 6ef9929854..591f113706 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoWindowManager.java @@ -71,4 +71,10 @@ public interface IMogoWindowManager extends IProvider { * 显示所有 */ void showAll(); + + /** + * 为了配合导航动画,主屏上方1/2屏的view通过此方法添加 + * @param view 主屏上方1/2屏的view + */ + void addTopView(View view); } From 5e8bb902a8f693140ac2575f36ded84db757d762 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 22 May 2020 13:46:44 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A8=E7=94=BB?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntranceFragment.java | 68 +-- .../extensions/utils/TopViewAnimHelper.java | 107 +++++ .../res/layout/module_ext_layout_entrance.xml | 393 +++++++++--------- 3 files changed, 320 insertions(+), 248 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java 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"> Date: Tue, 26 May 2020 09:59:01 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=8A=A8=E7=94=BB=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E5=87=86=E5=A4=87=E5=90=91=E5=A4=96?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/utils/TopViewAnimHelper.java | 177 ++++++++++++++++-- .../res/layout/module_ext_layout_entrance.xml | 7 +- 2 files changed, 167 insertions(+), 17 deletions(-) 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 1242013112..93ef407b60 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 @@ -5,6 +5,8 @@ import android.transition.AutoTransition; import android.transition.Transition; import android.transition.TransitionManager; import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; @@ -22,27 +24,74 @@ import com.mogo.utils.logger.Logger; public class TopViewAnimHelper { private ConstraintLayout topMotionLayout; - private Group naviGroup,remainTimeGroup,remainDistanceGroup, arriveTimeGroup; + private Group naviGroup, remainTimeGroup, remainDistanceGroup, arriveTimeGroup; private View naviBg; + private ImageView ivTurnIcon; + private TextView tvNextDistance; + private TextView tvNextRoad; + private ConstraintSet constraintSet = new ConstraintSet(); private Transition transition = new AutoTransition(); + private TextView cameraMode; public TopViewAnimHelper(ConstraintLayout rootView) { + this(rootView, null); + } + + public TopViewAnimHelper(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); - transition.setDuration(2000); + + 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); + tvNextRoad = rootView.findViewById(R.id.module_map_id_navi_next_info_road); + transition.setDuration(200); + + transition.addListener(new Transition.TransitionListener() { + @Override + public void onTransitionStart(Transition transition) { + if (listener != null) { + listener.onAnimStart(); + } + } + + @Override + public void onTransitionEnd(Transition transition) { + if (listener != null) { + listener.onAnimEnd(); + } + } + + @Override + public void onTransitionCancel(Transition transition) { + + } + + @Override + public void onTransitionPause(Transition transition) { + + } + + @Override + public void onTransitionResume(Transition transition) { + + } + }); + + cameraMode = rootView.findViewById(R.id.module_ext_id_north); } private boolean isTopViewOut = true; - public void startTopInAnim(){ + public void startTopInAnim() { Logger.d("TopViewAnimHelper", "startTopInAnim====="); - if(isTopViewOut) { + if (isTopViewOut) { + isTopViewOut = false; constraintSet.clone(topMotionLayout); constraintSet.getConstraint(R.id.module_entrance_id_top_container).layout.bottomToTop = -1; @@ -50,58 +99,160 @@ public class TopViewAnimHelper { 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)); + } constraintSet.applyTo(topMotionLayout); - if(naviGroup.getVisibility() == View.VISIBLE) { + 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); - isTopViewOut = false; } } - public void startTopOutAnim(){ + public void startTopOutAnim() { Logger.d("TopViewAnimHelper", "startTopOutAnim====="); - if(!isTopViewOut) { + 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 (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) { + 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); - isTopViewOut = true; } } - public void showNaviView(){ + 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{ + // 调整约束 + constraintSet.clone(topMotionLayout); + 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); +// 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); + constraintSet.applyTo(topMotionLayout); + } else { remainDistanceGroup.setVisibility(View.GONE); remainTimeGroup.setVisibility(View.GONE); arriveTimeGroup.setVisibility(View.GONE); + // 调整约束 + constraintSet.clone(topMotionLayout); + 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)); +// 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); + constraintSet.applyTo(topMotionLayout); } + + checkCameraModePosition(true); } - public void hideNaviView(){ + public void hideNaviView() { Logger.d("TopViewAnimHelper", "hideNaviView====="); naviGroup.setVisibility(View.GONE); remainDistanceGroup.setVisibility(View.GONE); remainTimeGroup.setVisibility(View.GONE); arriveTimeGroup.setVisibility(View.GONE); + checkCameraModePosition(true); + } + + private void checkCameraModePosition(boolean isNeedClone) { + if (isNeedClone) { + constraintSet.clone(topMotionLayout); + } + if (naviGroup.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, + ConstraintSet.BOTTOM, + (int) getDimen(R.dimen.dp_30)); + } + } + if (isNeedClone) { + constraintSet.applyTo(topMotionLayout); + } + } + + private float getDimen(int resId) { + return (int) topMotionLayout.getContext().getResources().getDimension(resId); + } + + interface OnTopViewAnimSimpleListener { + void onAnimStart(); + + void onAnimEnd(); } } 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 ad52d3abdd..e985dd586c 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 @@ -238,7 +238,7 @@ android:id="@+id/module_ext_id_north" android:layout_width="@dimen/dp_120" android:layout_height="@dimen/dp_120" - android:layout_marginTop="@dimen/dp_30" + android:layout_marginTop="@dimen/module_ext_north_goneMarginTop" android:background="@drawable/module_ext_dw_common_corner_bkg" android:drawableTop="@drawable/selector_icon_north_up" android:gravity="center_horizontal" @@ -246,9 +246,8 @@ android:text="@string/mode_north_up" android:textColor="@color/white" android:textSize="@dimen/dp_28" - app:layout_constraintRight_toRightOf="@+id/module_map_id_navi_bg" - app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg" - app:layout_goneMarginTop="@dimen/module_ext_north_goneMarginTop" /> + app:layout_constraintRight_toRightOf="@+id/module_entrance_id_top_container" + app:layout_constraintTop_toTopOf="parent"/> Date: Tue, 26 May 2020 11:30:33 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E6=AD=A4=E6=8F=90=E4=BA=A4=E5=B8=A6?= =?UTF-8?q?=E4=BA=86=E8=B0=83=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntranceFragment.java | 35 +++++++----- .../extensions/utils/TopViewAnimHelper.java | 54 ++++++++++++++++--- .../extensions/utils/TopViewManager.java | 40 ++++++++++++++ .../src/main/res/layout/demo_top.xml | 45 ++++++++++++++++ .../res/layout/module_ext_layout_entrance.xml | 3 +- .../com/mogo/service/IMogoServiceApis.java | 7 +++ .../com/mogo/service/MogoServicePaths.java | 5 ++ .../windowview/IMogoTopViewManager.java | 14 +++++ .../mogo/service/impl/MogoServiceApis.java | 8 ++- 9 files changed, 188 insertions(+), 23 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewManager.java create mode 100644 modules/mogo-module-extensions/src/main/res/layout/demo_top.xml create mode 100644 services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoTopViewManager.java 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 ) { From 103d36d8281dc2a781d28f5f81d78f7010bbaa9b Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 26 May 2020 11:52:41 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=BC=E8=88=AA=E7=BC=A9=E5=B0=8F=E5=90=8E=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntranceFragment.java | 67 ++++++------------- .../extensions/utils/TopViewAnimHelper.java | 18 ++--- .../extensions/utils/TopViewManager.java | 6 -- .../src/main/res/values-ldpi/dimens.xml | 4 +- .../src/main/res/values-xhdpi/dimens.xml | 4 +- 5 files changed, 32 insertions(+), 67 deletions(-) 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 ff07cb08e7..6066b2456c 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 @@ -199,25 +199,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 测试动画 - if (!naviToggle) { - 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{ - mApis.getTopViewManager().removeTopView(); + isClickShare = true; + if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { + mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); + } else { + ShareControl.getInstance( getActivity() ).showDialog(); + traceData( "1" ); } - naviToggle = !naviToggle; - // 原始逻辑 -// isClickShare = true; -// if ( mIMogoAuthorizeModuleManager.needAuthorize( AUTHORIZE_TYPE_LAUNCHER_SHARE ) ) { -// mIMogoAuthorizeModuleManager.invokeAuthorization( AUTHORIZE_TYPE_LAUNCHER_SHARE ); -// } else { -// ShareControl.getInstance( getActivity() ).showDialog(); -// traceData( "1" ); -// } } ); mDisplayOverview = findViewById( R.id.module_ext_id_display_overview ); @@ -234,24 +222,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location ); mMove2CurrentLocation.setOnClickListener( view -> { - // todo 测试动画 - if (!toggle) { - TopViewAnimHelper.getInstance().showNaviView(); - }else{ - TopViewAnimHelper.getInstance().hideNaviView(); + final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); + if ( location != null ) { + if ( !mMogoStatusManager.isV2XShow() ) { + mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); + mMApUIController.setLockZoom( 16 ); + mMApUIController.changeZoom( 16.0f ); + } + mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); + mMApUIController.recoverLockMode(); } - toggle = !toggle; - // 原始逻辑 -// final MogoLocation location = mMogoLocationClient.getLastKnowLocation(); -// if ( location != null ) { -// if ( !mMogoStatusManager.isV2XShow() ) { -// mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); -// mMApUIController.setLockZoom( 16 ); -// mMApUIController.changeZoom( 16.0f ); -// } -// mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); -// mMApUIController.recoverLockMode(); -// } } ); // mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel ); @@ -284,16 +264,13 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mCameraMode = findViewById( R.id.module_ext_id_north ); mCameraMode.setOnClickListener( view -> { - // 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 ) ); + 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 9d63dbd215..4547548674 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,7 +1,5 @@ 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; @@ -18,8 +16,6 @@ import androidx.constraintlayout.widget.Group; import com.mogo.module.extensions.R; import com.mogo.utils.logger.Logger; -import java.util.Random; - /** * 顶部动画帮助类 @@ -116,6 +112,12 @@ public class TopViewAnimHelper { public void startTopInAnim(View view, ViewGroup.LayoutParams params) { Logger.d("TopViewAnimHelper", "startTopInAnim====="); + 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) { isTopViewOut = false; @@ -287,12 +289,4 @@ 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 index 05dc6052c7..54a9485d89 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 @@ -18,12 +18,6 @@ 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); } diff --git a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml index 2c9dfd1b3c..044c42aef9 100644 --- a/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml +++ b/modules/mogo-module-extensions/src/main/res/values-ldpi/dimens.xml @@ -82,8 +82,8 @@ 144px 85px 85px - 56px - 56px + 52px + 52px 13px 13px 20px 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 9374230b56..bff31eac96 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 @@ -79,8 +79,8 @@ 144px 159px 159px - 56px - 56px + 96px + 96px 24px 83px 24px From 9422e20226d7238f553a518e09a544326965667c Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 26 May 2020 14:02:14 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=AA=E5=88=AB?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E7=9A=84=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntranceFragment.java | 13 -- .../extensions/navi/BaseNaviInfoView2.java | 170 ------------------ .../module/extensions/navi/NaviInfoView2.java | 66 ------- .../res/layout/module_ext_layout_entrance.xml | 8 - 4 files changed, 257 deletions(-) delete mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java delete mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java 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 6066b2456c..403b350379 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,30 +1,20 @@ package com.mogo.module.extensions.entrance; -import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; -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; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.constraintlayout.motion.widget.MotionLayout; -import androidx.constraintlayout.motion.widget.MotionScene; import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.constraintlayout.widget.ConstraintSet; -import androidx.constraintlayout.widget.Group; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; @@ -47,8 +37,6 @@ import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; 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; @@ -63,7 +51,6 @@ import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.ResourcesHelper; -import com.mogo.utils.logger.Logger; import java.util.HashMap; import java.util.Map; diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java deleted file mode 100644 index a907ee7994..0000000000 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView2.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.mogo.module.extensions.navi; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.constraintlayout.motion.widget.MotionLayout; -import androidx.constraintlayout.widget.ConstraintLayout; - -import com.mogo.map.impl.amap.utils.IconTypeUtils; -import com.mogo.map.navi.MogoNaviInfo; - -import java.text.SimpleDateFormat; -import java.util.Calendar; - -/** - * @author congtaowang - * @since 2019-10-03 - *

- * 描述 - */ -public abstract class BaseNaviInfoView2 extends ConstraintLayout { - - public BaseNaviInfoView2(Context context ) { - this( context, null ); - } - - public BaseNaviInfoView2(Context context, @Nullable AttributeSet attrs ) { - this( context, attrs, 0 ); - } - - public BaseNaviInfoView2(Context context, @Nullable AttributeSet attrs, int defStyleAttr ) { - super( context, attrs, defStyleAttr ); - } - - public void notifyChanged( MogoNaviInfo naviInfo ) { - - } - - protected void fillNextCrossTurning( TextView target, int nextIconType ) { - target.setText( "后" + IconTypeUtils.getNameByIconType( nextIconType ) ); - } - - protected void fillNextCrossIconType( ImageView target, int iconId ) { - if ( iconId > 0 ) { - target.setImageResource( iconId ); - } - } - - protected void fillNextCrossDistance( TextView target, TextView unit, int distance ) { - if ( distance >= 1000 ) { - target.setText( String.format( "%.1f", distance / 1000f ) ); - unit.setText( "km" ); - } else { - target.setText( distance + "" ); - unit.setText( "m" ); - } - } - - protected void fillFormatSurplusDistance( int m, StringBuilder builder ) { - if ( m >= 1000 ) { - builder.append( String.format( "%.1fkm", m / 1000f ) ); - } else { - builder.append( m ).append( "m" ); - } - } - - protected String getFormatSurplusDistance( int m ) { - if ( m >= 1000 ) { - mFormatSurplusDistanceUnit = "km"; - return String.format( "%.1f", m / 1000f ); - } else { - mFormatSurplusDistanceUnit = "m"; - return String.format( "%d", m ); - } - } - - private String mFormatSurplusDistanceUnit = ""; - - protected String getFormatSurplusDistanceUnit() { - return mFormatSurplusDistanceUnit; - } - - protected String getFormatSurplusTime( int seconds ) { - if ( seconds > 60 * 60 ) { - mFormatSurplusDistanceUnit = "h"; - return String.format( "%.1f", ( ( float ) seconds ) / 60 * 60 ); - } - - if ( seconds > 60 ) { - mFormatSurplusTimeUnit = "min"; - return String.format( "%.1f", ( ( float ) seconds ) / 60 ); - } - - mFormatSurplusTimeUnit = "s"; - return String.format( "%d", seconds ); - } - - private String mFormatSurplusTimeUnit = ""; - - protected String getFormatSurplusTimeUnit() { - return mFormatSurplusTimeUnit; - } - - protected void fillFormatTime( int seconds, StringBuilder builder ) { - int days = seconds / ( 24 * 60 * 60 ); - if ( days > 0 ) { - builder.append( days ).append( "天" ); - } - seconds -= days * 24 * 60 * 60; - int hours = seconds / ( 60 * 60 ); - if ( hours > 0 ) { - builder.append( hours ).append( "小时" ); - } - seconds -= hours * 60 * 60; - int min = seconds / 60; - builder.append( min > 1 ? min : 1 ).append( "分钟" ); - } - - protected String getArriveTime( int seconds ) { - int days = seconds / ( 24 * 60 * 60 ); - if ( days > 0 ) { - return String.format( "%d天后", days ); - } else { - seconds -= days * 24 * 60 * 60; - int hours = seconds / ( 60 * 60 ); - seconds -= hours * 60 * 60; - int min = seconds / 60; - Calendar calendar = Calendar.getInstance(); - int curHour = calendar.get( Calendar.HOUR_OF_DAY ); - int curMin = calendar.get( Calendar.MINUTE ); - if ( curHour + hours + ( curMin + min ) / 60 > 24 ) { - return "一天后"; - } else { - calendar.add( Calendar.HOUR_OF_DAY, hours ); - calendar.add( Calendar.MINUTE, min ); - SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm" ); - return dateFormat.format( calendar.getTime() ); - } - } - } - - protected void fillArriveTime( int seconds, StringBuilder builder ) { - - int days = seconds / ( 24 * 60 * 60 ); - if ( days > 0 ) { - builder.append( days ).append( "天后" ); - } else { - seconds -= days * 24 * 60 * 60; - int hours = seconds / ( 60 * 60 ); - seconds -= hours * 60 * 60; - int min = seconds / 60; - Calendar calendar = Calendar.getInstance(); - int curHour = calendar.get( Calendar.HOUR_OF_DAY ); - int curMin = calendar.get( Calendar.MINUTE ); - if ( curHour + hours + ( curMin + min ) / 60 > 24 ) { - builder.append( "一天后" ); - } else { - calendar.add( Calendar.HOUR_OF_DAY, hours ); - calendar.add( Calendar.MINUTE, min ); - SimpleDateFormat dateFormat = new SimpleDateFormat( "HH:mm" ); - builder.append( dateFormat.format( calendar.getTime() ) ); - } - } - builder.append( "到达" ); - } -} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java deleted file mode 100644 index 8c6784453f..0000000000 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView2.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mogo.module.extensions.navi; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.constraintlayout.widget.Group; - -import com.mogo.module.extensions.R; - -/** - * 改变实现方式,使用MotionLayout来实现,方便增加动画 - * - * @author tongchenfei - */ -public class NaviInfoView2 extends BaseNaviInfoView2 { - private ImageView ivTurnIcon; - private View vBg; - private TextView tvNextDistance; - private TextView tvNextDistanceUnit; - private TextView tvNextTurnInfo; - private TextView tvNextRoad; - private Group remainDistanceGroup,remainTimeGroup, arriveTimeGroup; - - public NaviInfoView2(Context context) { - this(context,null); - } - - public NaviInfoView2(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public NaviInfoView2(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - ivTurnIcon = findViewById(R.id.module_map_id_navi_next_info_road_turn_icon); - vBg = findViewById(R.id.module_map_id_navi_bg); - tvNextDistance = findViewById(R.id.module_map_id_navi_next_info_distance); - tvNextRoad = findViewById(R.id.module_map_id_navi_next_info_road); - remainDistanceGroup = findViewById(R.id.remainDistanceGroup); - remainTimeGroup = findViewById(R.id.remainTimeGroup); - arriveTimeGroup = findViewById(R.id.arriveTimeGroup); - } - - /** - * 布局约束转成小的 - */ - public void setToSmall(){ - ivTurnIcon.getLayoutParams().width = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); - ivTurnIcon.getLayoutParams().height = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_small_width); - vBg.getLayoutParams().height = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height); - - } - - public void setToBig(){ - ivTurnIcon.getLayoutParams().width = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_width); - ivTurnIcon.getLayoutParams().height = - (int) getResources().getDimension(R.dimen.module_ext_navi_info_panel_turn_icon_width); - - } -} 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 7b398b6a9d..d6f81c307b 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 @@ -5,14 +5,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - -