From 57356211b1cd247f7c9104b51fa1a0b916eb9472 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 26 Feb 2020 12:40:03 +0800 Subject: [PATCH 1/3] opt: cpu --- .idea/misc.xml | 2 +- .../com/mogo/module/apps/AppsFragment.java | 5 ++ .../module/extensions/ExtensionsFragment.java | 30 +++++--- .../com/mogo/module/extensions/anim/Anim.java | 14 ++++ .../module/extensions/anim/AnimWrapper.java | 68 +++++++++++++++++++ .../module/extensions/anim/KitkatAnim.java | 20 ++++++ .../module/extensions/anim/OthersAnim.java | 32 +++++++++ .../layout/module_ext_layout_extensions.xml | 3 +- .../java/com/mogo/module/map/MapFragment.java | 35 +++++++++- .../com/mogo/module/map/MapPresenter.java | 4 +- .../module/service/MogoServiceProvider.java | 5 -- .../com/mogo/module/service/ServiceConst.java | 4 +- .../statusmanager/IMogoStatusManager.java | 13 ++++ .../statusmanager/StatusDescriptor.java | 7 +- .../impl/statusmanager/MogoStatusManager.java | 12 ++++ 15 files changed, 228 insertions(+), 26 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 707ee6e613..2dc54c489f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java index 96b2ac1e5b..f6565bf39c 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsFragment.java @@ -17,6 +17,7 @@ import com.mogo.module.apps.model.AppInfo; import com.mogo.module.apps.view.PagerSlidingTabStripV2; import com.mogo.service.MogoServicePaths; import com.mogo.service.fragmentmanager.IMogoFragmentManager; +import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.logger.Logger; import java.util.List; @@ -38,6 +39,7 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme private View mExit; private IMogoFragmentManager mMogoFragmentManager; + private IMogoStatusManager mMogoStatusManager; private View mLoadingView; private PagerSlidingTabStripV2 mIndicator; @@ -64,6 +66,7 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme @Override public void onStateChanged( @NonNull View bottomSheet, int newState ) { if ( newState == BottomSheetBehavior.STATE_COLLAPSED ) { + mMogoStatusManager.setAppListUIShow( TAG, false ); mMogoFragmentManager.pop(); } } @@ -90,6 +93,8 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation(); + mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation(); + mMogoStatusManager.setAppListUIShow( TAG, true ); } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index c9c640cec8..eb6788ead6 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -1,6 +1,5 @@ package com.mogo.module.extensions; -import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.text.TextUtils; import android.view.View; @@ -13,8 +12,10 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.voice.AIAssist; +import com.mogo.module.extensions.anim.AnimWrapper; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.fragmentmanager.IMogoFragmentManager; /** * @author congtaowang @@ -26,8 +27,10 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private static final String TAG = "ExtensionsFragment"; + public static final int MAX_DISPLAY_MSG_AMOUNT = 99; + private ImageView mVoiceIcon; - private AnimationDrawable mAnim; + private AnimWrapper mAnim = new AnimWrapper(); private TextView mVoiceMsg; private TextView mTime; @@ -42,6 +45,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP private TextView mMsgCounter; private IMogoAnalytics mAnalytics; + private IMogoFragmentManager mMogoFragmentManager; @Override protected int getLayoutId() { @@ -51,7 +55,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override protected void initViews() { mVoiceIcon = findViewById( R.id.module_ext_id_voice ); - mAnim = ( AnimationDrawable ) mVoiceIcon.getBackground(); + mAnim.initAnim( mVoiceIcon ); mVoiceMsg = findViewById( R.id.module_ext_id_voice_msg ); mVoiceIcon.setOnClickListener( view -> { @@ -87,22 +91,28 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP public void onActivityCreated( @Nullable Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); + mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() ); + + mMogoFragmentManager.addMainFragmentStackTransactionListener( size -> { + // 主页 fragment 栈变化的时候,改变动画状态 + if ( size == 0 ) { + mAnim.start(); + } else { + mAnim.stop(); + } + } ); } @Override public void onResume() { super.onResume(); - if ( mAnim != null ) { - mAnim.start(); - } + mAnim.start(); } @Override public void onStop() { super.onStop(); - if ( mAnim != null ) { - mAnim.stop(); - } + mAnim.stop(); } @Override @@ -131,7 +141,7 @@ public class ExtensionsFragment extends MvpFragment< ExtensionsView, ExtensionsP @Override public void renderMsgInfo( boolean hasMsg, int amount ) { mMsgContainer.setVisibility( hasMsg ? View.VISIBLE : View.GONE ); - mMsgCounter.setText( amount > 99 ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) ); + mMsgCounter.setText( amount > MAX_DISPLAY_MSG_AMOUNT ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) ); } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java new file mode 100644 index 0000000000..85717028df --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/Anim.java @@ -0,0 +1,14 @@ +package com.mogo.module.extensions.anim; + +/** + * @author congtaowang + * @since 2020-02-26 + *

+ * 描述 + */ +public interface Anim { + + void start(); + + void stop(); +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java new file mode 100644 index 0000000000..6c31ce895e --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/AnimWrapper.java @@ -0,0 +1,68 @@ +package com.mogo.module.extensions.anim; + +import android.graphics.drawable.AnimationDrawable; +import android.os.Build; +import android.widget.ImageView; + +import com.mogo.module.extensions.R; +import com.mogo.utils.ThreadPoolService; +import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.logger.Logger; + +/** + * @author congtaowang + * @since 2020-02-26 + *

+ * 描述 + */ +public class AnimWrapper implements Anim { + + private static final String TAG = "AnimWrapper"; + private ImageView mTarget; + private Anim mDelegate; + private boolean mIsStarted = false; + + public AnimWrapper() { + } + + public void initAnim( ImageView target ) { + mTarget = target; + if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) { + ThreadPoolService.execute( () -> { + final AnimationDrawable drawable = new AnimationDrawable(); + for ( int i = 0; i < AnimRes.sRes.length; i++ ) { + drawable.addFrame( target.getResources().getDrawable( AnimRes.sRes[i] ), 100 ); + } + UiThreadHandler.post( () -> { + target.setBackground( drawable ); + mDelegate = new OthersAnim( drawable ); + start(); + } ); + } ); + } else { + mTarget.setImageResource( R.drawable.mogo_tts_icon_00000 ); + } + } + + @Override + public synchronized void start() { + if ( mDelegate != null && !mIsStarted ) { + mIsStarted = true; + mDelegate.start(); + Logger.d( TAG, "开启小智动画" ); + } + } + + @Override + public void stop() { + if ( mDelegate != null ) { + mIsStarted = false; + mDelegate.stop(); + Logger.d( TAG, "停止小智动画" ); + } + } + + public void release() { + mDelegate = null; + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java new file mode 100644 index 0000000000..9043265a2f --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/KitkatAnim.java @@ -0,0 +1,20 @@ +package com.mogo.module.extensions.anim; + +/** + * @author congtaowang + * @since 2020-02-26 + *

+ * 描述 + */ +public class KitkatAnim implements Anim{ + + @Override + public void start() { + + } + + @Override + public void stop() { + + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java new file mode 100644 index 0000000000..57adffda3a --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/OthersAnim.java @@ -0,0 +1,32 @@ +package com.mogo.module.extensions.anim; + +import android.graphics.drawable.AnimationDrawable; + +/** + * @author congtaowang + * @since 2020-02-26 + *

+ * 描述 + */ +public class OthersAnim implements Anim{ + + private AnimationDrawable mDrawable; + + public OthersAnim( AnimationDrawable drawable ) { + this.mDrawable = drawable; + } + + @Override + public void start() { + if ( mDrawable != null ) { + mDrawable.start(); + } + } + + @Override + public void stop() { + if ( mDrawable != null ) { + mDrawable.stop(); + } + } +} diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml index f3d6298784..fe5546a3c0 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml @@ -14,8 +14,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_width="@dimen/module_ext_voice_icon_width" - android:layout_height="@dimen/module_ext_voice_icon_height" - android:background="@drawable/module_ext_frame_anim_voice"/> + android:layout_height="@dimen/module_ext_voice_icon_height"/> diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java index 089719b3ad..9bad8a5c75 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java @@ -5,11 +5,16 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; import com.mogo.map.IMogoMap; import com.mogo.map.IMogoUiSettings; import com.mogo.map.MogoMapView; import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.service.statusmanager.StatusDescriptor; /** * @author congtaowang @@ -17,12 +22,15 @@ import com.mogo.map.uicontroller.IMogoMapUIController; *

* 地图图层,地图操作都在这个图层完成 */ -public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView { +public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView, IMogoStatusChangedListener { private static final String TAG = "MapFragment"; private MogoMapView mMogoMapView; private IMogoMap mMogoMap; + private IMogoStatusManager mMogoStatusManager; + + private boolean mIsControllerByOthersStatus = false; @Override protected int getLayoutId() { @@ -36,8 +44,9 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements //mMogoMap.getUIController().showMyLocation( true ); } - @Override protected void initViews(Bundle savedInstanceState) { - super.initViews(savedInstanceState); + @Override + protected void initViews( Bundle savedInstanceState ) { + super.initViews( savedInstanceState ); mMogoMapView = findViewById( R.id.module_map_id_map ); mMogoMapView.onCreate( savedInstanceState ); mMogoMap = mMogoMapView.getMap(); @@ -58,11 +67,16 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements // mMogoMapView.onCreate( savedInstanceState ); //} initMapView(); + mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation( getContext() ); + mMogoStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.APP_LIST_UI, this ); } @Override public void onPause() { super.onPause(); + if ( mIsControllerByOthersStatus ) { + return; + } if ( mMogoMapView != null ) { mMogoMapView.onPause(); } @@ -71,6 +85,9 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements @Override public void onResume() { super.onResume(); + if ( mIsControllerByOthersStatus ) { + return; + } if ( mMogoMapView != null ) { mMogoMapView.onResume(); } @@ -117,6 +134,18 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements return mMogoMap.getUIController(); } + @Override + public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { + if ( descriptor == StatusDescriptor.APP_LIST_UI ) { + mIsControllerByOthersStatus = isTrue; + if ( isTrue ) { + mMogoMapView.onPause(); + } else { + mMogoMapView.onResume(); + } + } + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index eb8e0538bb..3ca1b15815 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -64,7 +64,7 @@ public class MapPresenter extends Presenter implements int type = intent.getIntExtra("EXTRA_TYPE", -1); int opera_type = intent.getIntExtra("EXTRA_OPERA", -1); - Logger.d("NaviManager", "key_type" + key_type, null); + Logger.d("NaviManager", "key_type" + key_type); if (key_type == 10027) { if (type == 0) { @@ -211,7 +211,7 @@ public class MapPresenter extends Presenter implements @Override public void onCmdSelected(String cmd) { - Logger.d(TAG, cmd, null); + Logger.d(TAG, cmd); switch (cmd) { case VoiceConstants.CMD_MAP_TRAFFIC_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_TRAFFIC_MODE: diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index a52900c1f9..a7b84ea098 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -120,11 +120,6 @@ public class MogoServiceProvider implements IMogoModuleProvider, */ private boolean mLoopRequest = false; - /** - * 刷新补偿间隔 - */ - private long mLoopInterval = 10_000L; - private Handler mHandler = new Handler( Looper.getMainLooper() ) { @Override public void handleMessage( @NonNull Message msg ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java index c0533b0b1b..67fada7976 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java @@ -25,12 +25,12 @@ public class ServiceConst { /** * 倒计时间隔 */ - public static final int DECREASE_INTERVAL = 1_000; + public static final int DECREASE_INTERVAL = 10_000; /** * 刷新失败补偿消息 */ - public static final int MSG_LOOP_REQUEST = 10_000; + public static final int MSG_LOOP_REQUEST = 0x101; /** * 刷新失败补偿时间间隔 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java index 5d15666399..f5c0675255 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java @@ -60,6 +60,12 @@ public interface IMogoStatusManager extends IProvider { */ boolean isSearchUIShow(); + /** + * APP 列表是否显示 + * @return + */ + boolean isAppListUIShow(); + /** * 设置小智语音UI状态 * @@ -114,6 +120,13 @@ public interface IMogoStatusManager extends IProvider { */ void setSearchUIShow( String tag, boolean isShow ); + /** + * app 列表是否显示 + * @param tag + * @param isShow + */ + void setAppListUIShow( String tag, boolean isShow ); + /** * 注册监听 * diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java index 35131fc0b9..53b4b38000 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java @@ -41,5 +41,10 @@ public enum StatusDescriptor { /** * 搜索页面 */ - SEARCH_UI; + SEARCH_UI, + + /** + * app 列表 + */ + APP_LIST_UI; } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java index 75942c569f..9293a3cbf2 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java @@ -84,6 +84,11 @@ public class MogoStatusManager implements IMogoStatusManager { return get_bool_val( StatusDescriptor.SEARCH_UI ); } + @Override + public boolean isAppListUIShow() { + return get_bool_val( StatusDescriptor.APP_LIST_UI ); + } + private boolean get_bool_val( StatusDescriptor descriptor ) { Boolean val = mStatus.get( descriptor ); return val == null ? false : val; @@ -141,6 +146,13 @@ public class MogoStatusManager implements IMogoStatusManager { recordStatusModifier( tag, StatusDescriptor.SEARCH_UI ); } + @Override + public void setAppListUIShow( String tag, boolean isShow ) { + mStatus.put( StatusDescriptor.APP_LIST_UI, isShow ); + invokeStatusChangedListener( StatusDescriptor.APP_LIST_UI, isShow ); + recordStatusModifier( tag, StatusDescriptor.APP_LIST_UI ); + } + private void invokeStatusChangedListener( StatusDescriptor descriptor, boolean status ) { if ( mListeners.containsKey( descriptor ) ) { Iterator< IMogoStatusChangedListener > iterator = mListeners.get( descriptor ).iterator(); From 0aaef5d5585ae4f2f34ea0409cd617e4e01d992a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 26 Feb 2020 13:29:26 +0800 Subject: [PATCH 2/3] opt kotlin config --- modules/mogo-module-share/build.gradle | 2 +- modules/mogo-module-tanlu/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/mogo-module-share/build.gradle b/modules/mogo-module-share/build.gradle index e5c4435c47..639efe8be1 100644 --- a/modules/mogo-module-share/build.gradle +++ b/modules/mogo-module-share/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'com.android.library' -apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' apply plugin: 'com.alibaba.arouter' android { diff --git a/modules/mogo-module-tanlu/build.gradle b/modules/mogo-module-tanlu/build.gradle index 8a280b205d..a1b62b8fdd 100644 --- a/modules/mogo-module-tanlu/build.gradle +++ b/modules/mogo-module-tanlu/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'com.android.library' -apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' apply plugin: 'com.alibaba.arouter' android { From 7fd97bd1182522e5af1d609e2ba401da0d48492a Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 26 Feb 2020 14:21:03 +0800 Subject: [PATCH 3/3] opt: sink marker animation --- .../impl/amap/marker/AMapMarkerWrapper.java | 17 +++++++++++ .../java/com/mogo/map/marker/IMogoMarker.java | 15 ++++++++++ .../service/marker/MapMarkerManager.java | 29 ++----------------- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java index c811a6860f..e248076708 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Point; import android.view.View; +import android.view.animation.BounceInterpolator; import android.view.animation.Interpolator; import com.amap.api.maps.model.BitmapDescriptor; @@ -12,6 +13,7 @@ import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.ScaleAnimation; import com.amap.api.maps.model.animation.TranslateAnimation; import com.mogo.map.MogoLatLng; import com.mogo.map.impl.amap.utils.ObjectUtils; @@ -310,4 +312,19 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { public MogoMarkerOptions getMogoMarkerOptions() { return mMogoMarkerOptions; } + + @Override + public void startScaleAnimation( float fromX, float toX, float fromY, float toY, int duration, Interpolator interpolator ) { + if ( isDestroyed() ) { + return; + } + + ScaleAnimation animationScale = new ScaleAnimation(fromX, toX, fromY, toY); + animationScale.setDuration(duration); + animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); + animationScale.setInterpolator(interpolator); + + mMarker.setAnimation( animationScale ); + mMarker.startAnimation(); + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java index 9eeca2123d..0275626d62 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java @@ -227,8 +227,23 @@ public interface IMogoMarker { /** * Marker 配置 + * * @return */ MogoMarkerOptions getMogoMarkerOptions(); + + /** + * 开始缩放动画 + * + * @param duration + * @param interpolator + */ + void startScaleAnimation( float fromX, + float toX, + float fromY, + float toY, + int duration, + Interpolator interpolator ); + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 998a1376c7..58185cda2b 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -7,10 +7,7 @@ import android.text.TextUtils; import android.view.animation.BounceInterpolator; import android.view.animation.OvershootInterpolator; -import com.amap.api.maps.model.animation.Animation; -import com.amap.api.maps.model.animation.ScaleAnimation; import com.mogo.map.MogoLatLng; -import com.mogo.map.impl.amap.marker.AMapMarkerWrapper; import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; @@ -229,18 +226,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag } mogoMarker.setToTop(); try { - // 使用TranslateAnimation,填写一个需要移动的目标点 - ScaleAnimation animationScale = new ScaleAnimation(0.6f, 1f, 0.6f, 1f); - animationScale.setDuration(1000); - animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); - animationScale.setInterpolator(new BounceInterpolator()); - - // 设置动画 - if (mogoMarker instanceof AMapMarkerWrapper) { - ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); - ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); - } - } catch (Exception e) { + mogoMarker.startScaleAnimation( 0.6f, 1f, 0.6f, 1f,1000, new BounceInterpolator( ) ); + } catch( Exception e ){ Logger.e(TAG, e, "error."); } } @@ -260,17 +247,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag return; } try { - // 使用TranslateAnimation,填写一个需要移动的目标点 - ScaleAnimation animationScale = new ScaleAnimation(1f, 0.6f, 1f, 0.6f); - animationScale.setDuration(300); - animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); - animationScale.setInterpolator(new OvershootInterpolator()); - - // 设置动画 - if (mogoMarker instanceof AMapMarkerWrapper) { - ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); - ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); - } + mogoMarker.startScaleAnimation( 1f, 0.6f, 1f, 0.6f,300, new OvershootInterpolator( ) ); } catch (Exception e) { Logger.e(TAG, e, "error."); }