From 8b4000ad4ac6989768aa1cb3078b13f0ef720406 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Fri, 10 Jan 2020 20:05:23 +0800 Subject: [PATCH] opt --- .../map/impl/amap/AMapNaviViewWrapper.java | 31 ++++++++++++++ .../impl/amap/marker/AMapMarkerWrapper.java | 4 ++ .../amap/uicontroller/AMapUIController.java | 11 ++++- .../uicontroller/IMogoMapUIController.java | 12 ++++++ .../com/mogo/map/MogoMapUIController.java | 9 ++++ .../module/extensions/anim/JSurfaceView.java | 2 +- .../extensions/entrance/EntranceFragment.java | 2 +- .../module/navi/ui/search/SearchFragment.java | 12 ++++++ .../navi/ui/setting/SettingAddressFragment.kt | 40 +++++++++++------- .../mipmap-xhdpi/icon_choose_position2.png | Bin 0 -> 2093 bytes .../fragmentmanager/IMogoFragmentManager.java | 2 - 11 files changed, 104 insertions(+), 21 deletions(-) create mode 100644 modules/mogo-module-search/src/main/res/mipmap-xhdpi/icon_choose_position2.png diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index dd29093db8..ad33524ffe 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -7,6 +7,7 @@ import android.graphics.Point; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; +import android.view.animation.Interpolator; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; @@ -17,6 +18,8 @@ import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MyLocationStyle; import com.amap.api.maps.model.Poi; import com.amap.api.maps.model.Polyline; +import com.amap.api.maps.model.animation.Animation; +import com.amap.api.maps.model.animation.TranslateAnimation; import com.amap.api.navi.AMapNaviView; import com.amap.api.navi.AMapNaviViewListener; import com.amap.api.navi.AMapNaviViewOptions; @@ -24,13 +27,16 @@ import com.amap.api.navi.model.NaviInfo; import com.mogo.map.IMogoMap; import com.mogo.map.IMogoMapView; import com.mogo.map.MogoLatLng; +import com.mogo.map.impl.amap.marker.AMapMarkerWrapper; import com.mogo.map.impl.amap.message.AMapMessageListener; import com.mogo.map.impl.amap.message.AMapMessageManager; import com.mogo.map.impl.amap.navi.NaviClient; import com.mogo.map.impl.amap.utils.ObjectUtils; import com.mogo.map.listener.MogoMapListenerHandler; +import com.mogo.map.marker.IMogoMarker; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; +import com.mogo.utils.WindowUtils; import com.mogo.utils.logger.Logger; /** @@ -526,4 +532,29 @@ public class AMapNaviViewWrapper implements IMogoMapView, } return null; } + + @Override + public void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator, long duration ) { + if ( marker == null || high <= 0.0f || interpolator == null || duration < 0 ) { + return; + } + try { + final LatLng latLng = ObjectUtils.fromMogo2( marker.getPosition() ); + Point point = mMapView.getMap().getProjection().toScreenLocation( latLng ); + point.y -= WindowUtils.dip2px( getContext(), high ); + LatLng target = mMapView.getMap().getProjection().fromScreenLocation( point ); + //使用TranslateAnimation,填写一个需要移动的目标点 + Animation animation = new TranslateAnimation( target ); + animation.setInterpolator( interpolator ); + //整个移动所需要的时间 + animation.setDuration( duration ); + //设置动画 + if ( marker instanceof AMapMarkerWrapper ) { + ( ( AMapMarkerWrapper ) marker ).getMarker().setAnimation( animation ); + ( ( AMapMarkerWrapper ) marker ).getMarker().startAnimation(); + } + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } } 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 ac464d5de0..857c4bc424 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 @@ -289,4 +289,8 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { mMarker.setPositionByPixels( position.x, position.y ); } } + + public Marker getMarker() { + return mMarker; + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java index 584a88ee3c..0df050bb3d 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java @@ -1,9 +1,11 @@ package com.mogo.map.impl.amap.uicontroller; import android.graphics.Point; +import android.view.animation.Interpolator; import com.mogo.map.MogoLatLng; import com.mogo.map.MogoMap; +import com.mogo.map.marker.IMogoMarker; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.utils.logger.Logger; @@ -134,7 +136,7 @@ public class AMapUIController implements IMogoMapUIController { @Override public MogoLatLng getWindowCenterLocation() { if ( mClient != null ) { - return mClient.getCameraSouthWestPosition(); + return mClient.getWindowCenterLocation(); } return null; } @@ -153,4 +155,11 @@ public class AMapUIController implements IMogoMapUIController { } return null; } + + @Override + public void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator, long duration ) { + if ( mClient != null ) { + mClient.startJumpAnimation( marker, high, interpolator, duration ); + } + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 04b6bf7cf0..4d269020d1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -1,8 +1,10 @@ package com.mogo.map.uicontroller; import android.graphics.Point; +import android.view.animation.Interpolator; import com.mogo.map.MogoLatLng; +import com.mogo.map.marker.IMogoMarker; /** * @author congtaowang @@ -112,4 +114,14 @@ public interface IMogoMapUIController { * @return */ Point getLocationPointInScreen( MogoLatLng latLng ); + + /** + * marker 跳跃动画 + * + * @param marker 跳跃的 marker + * @param high 跳跃的高度 + * @param interpolator 插值器 + * @param duration 动画时间 + */ + void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator, long duration ); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index 8071a90446..d664bb8a22 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -1,8 +1,10 @@ package com.mogo.map; import android.graphics.Point; +import android.view.animation.Interpolator; import com.mogo.map.impl.amap.uicontroller.AMapUIController; +import com.mogo.map.marker.IMogoMarker; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; @@ -146,4 +148,11 @@ public class MogoMapUIController implements IMogoMapUIController { } return null; } + + @Override + public void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator, long duration ) { + if ( mDelegate != null ) { + mDelegate.startJumpAnimation( marker, high, interpolator, duration ); + } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java index 51fa4b404a..6d4c941c8e 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/anim/JSurfaceView.java @@ -50,7 +50,7 @@ public class JSurfaceView extends SurfaceView implements Runnable, SurfaceHolder private void init() { mHolder = getHolder(); mHolder.addCallback( this ); - setZOrderOnTop( true ); + setZOrderOnTop( false ); mHolder.setFormat( PixelFormat.TRANSLUCENT ); } 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 d1eefcb5a3..6f71bdd720 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 @@ -146,7 +146,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent mService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation( getContext() ); mMogoRegisterCenter = ( IMogoRegisterCenter ) ARouter.getInstance().build( MogoServicePaths.PATH_REGISTER_CENTER ).navigation( getContext() ); mMApUIController = mService.getMapUIController(); - mMogoLocationClient = mService.getLocationClient( getContext() ); + mMogoLocationClient = mService.getSingletonLocationClient( getContext() ); mMogoNavi = mService.getNavi( getContext() ); mMogoRegisterCenter.registerMogoNaviListener( ExtensionsModuleConst.TYPE_ENTRANCE, this ); diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java index cd8931cb66..2970c5bfe9 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java @@ -26,6 +26,8 @@ import com.mogo.service.fragmentmanager.FragmentDescriptor; import java.util.ArrayList; import java.util.List; +import javax.net.ssl.SSLHandshakeException; + /** * 搜索页面 *

@@ -82,6 +84,9 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); SearchServiceHolder.INSTANCE.init(getActivity().getApplicationContext()); + SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers(); + SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation( false ); + moveMapToCenter(); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { @@ -395,4 +400,11 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi push(CategorySearchFragment.Companion.newInstance(text), MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY); } + + @Override + public void onDestroyView() { + super.onDestroyView(); + SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation( true ); + moveMapToRight(); + } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt index d186fc7eb8..ef55d4141e 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/SettingAddressFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment import com.alibaba.android.arouter.facade.annotation.Route +import com.amap.api.col.n3.it import com.mogo.map.MogoLatLng import com.mogo.map.listener.IMogoMapListener import com.mogo.map.location.IMogoLocationListener @@ -55,9 +56,17 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { super.onMapChanged(latLng, zoom, tilt, bearing) var mogoRegeocodeQuery = MogoRegeocodeQuery() mogoRegeocodeQuery.point = latLng - SearchServiceHolder.getGeoSearcher() - .getFromLocationAsyn(mogoRegeocodeQuery) - + SearchServiceHolder.getGeoSearcher().getFromLocationAsyn(mogoRegeocodeQuery) + addMarker?.apply { + SearchServiceHolder.getMapUIController().startJumpAnimation(this, + 150f,{input -> + if (input <= 0.5) { + (0.5f - 2.0 * (0.5 - input) * (0.5 - input)).toFloat() + } else { + (0.5f - Math.sqrt(((input - 0.5f) * (1.5f - input)).toDouble())).toFloat() + } + }, 600) + } } } @@ -109,35 +118,34 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { et_navi_search.isEnabled = false et_navi_search.setText(getString(string.drag_map_to_choose)) var location = SearchServiceHolder.getMapUIController() - .windowCenterLocation + .windowCenterLocation if (addMarker == null) { - var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position) + var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position2) val options = MogoMarkerOptions() - .icon(decodeResource) - .latitude(location?.lat ?: 0.0) - .owner(TAG) - .anchor(0.5f, 0.5f) - .longitude(location?.lng ?: 0.0) + .icon(decodeResource) + .latitude(location?.lat ?: 0.0) + .owner(TAG) + .anchor(0.5f, 1f) + .longitude(location?.lng ?: 0.0) addMarker = SearchServiceHolder.getMarkerManger() - .addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options) + .addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options) var locationPointInScreen = SearchServiceHolder.getMapUIController() - .getLocationPointInScreen(location) + .getLocationPointInScreen(location) addMarker?.setPositionByPixels(locationPointInScreen) } - } override fun onDestroyView() { super.onDestroyView() setMarkerStatus(true) - SearchServiceHolder.getMapUIController() - .showMyLocation(true) +// SearchServiceHolder.getMapUIController() +// .showMyLocation(true) SearchServiceHolder.listenerCenter.unregisterMogoMapListener( MogoModulePaths.PATH_FRAGMENT_SETTING_HOME ) addMarker?.destroy() - moveMapToRight() +// moveMapToRight() } companion object { diff --git a/modules/mogo-module-search/src/main/res/mipmap-xhdpi/icon_choose_position2.png b/modules/mogo-module-search/src/main/res/mipmap-xhdpi/icon_choose_position2.png new file mode 100644 index 0000000000000000000000000000000000000000..917d15deccec79330b8563d79991b4c0f18b1b1e GIT binary patch literal 2093 zcmV+|2-5e7P)Px+=Sf6CRCod1TU%^YMHrr$ZOf$=xt2B-s7VPFyiyZigjNCsh(V)5)L^^>)F;s* zFPOkKDltI_7$49W!vpaG!3a?>2(*P4eQ4FFr3y%q8rni>pdeV-Gk)Kpr<}IC=bSw| zyKSAM%`@}Jye29y z`|0r|2y(?*SbJf?yZwY^vK({s7b(;dkZkhO>q(I0EMfhC;gRnpWWdU#Y*Ru#=tVN& z9OSU1PAeC&wko1%-2Nuno(2B#5yaYuwQomtaMe_4c4yP~x%bn}@~E z#@sg_zx%Pa_c?9_Loi4cS=@J@>}5fEDE1~k1j!LHv6F)velLP_zfdc)9*P@Hs%c=i zIk@EX3{l&0zGNN8q)n@D>C&B+Bz@QXQEIB=p!Zmir-GqQjy*;W_6euE`)mvHJoo!q z>nsY59(mGYq5wj9)S6bP3VEKiEy%;_|Aid+lM6X9oyC7*I`%B%bc9)V3NiOCDej#j z#d!O|LWuLYtoZq~7KeY;qW)Amv#_~o8V$JF<04aPQYeRIGUOcHY{RyOLn$QcX{Lm7LGhb& zUb@(pGRy@%4Fv5=StByJTBaII$hd_;PU4v8Uc7H*hfQ%SNHv&{;lhxooa=N~X6U4| z&xIC%h9+b<`pHe9&r`l0cLWZ$nA~W=HdDapp`;p2$Z#-_8&^?d1nGXI8cfKzg+aG* zh#DhE-!j!;LWYBZ+_+7&IvJ_Pbe!p1h7D|M*7=sL3fE5cVFAT!N5{GIYVsu6hHXs- zSg=lMr4E`D%2UDG&ypiaa%^MzL}5kLA&?YePBeBJr$nRv{6HUDjJ5FBhS z-8Fj%9#|u^27%@LmLYpN~(%&tZ}p zeNN@lm$oD^6T9u+Ku z=6Lwx65Ri){1;C&7Ggd&#A`ID^7sM@Scy3vuDAqQ5#~NWOsM%F`DeU_gCY;uh>=(m z;lZlv9r#uTPc@F>D!j9D2kc`r#2~zl?_w}$V9o8#20j&km^uA-mdo*0DY{(s>wk29Ay$FXQ=m=b} zQRiO!$9~eh3PdM3`9@+X&w<$1;Um=+w{MxO?34&P%IvSi$HW{w#CZaFkArNXQG<$${$zmFd(=8^P*z zvKAY1jiV@G4C`UT_OF*vfOkRK2vThjE2h(WHU@A0sg?R#G0oOXJ3(84$6QRe^)f;* zp%pV=y^Ih{WW`KaFJlDzSusP_BSHJy1QV%*l9G~PmSs)s>gp1xK|ND@rLqb z%F4>JTUuIX0>E^TDSXLdD z;tR?Rq`0`a;QICJ3(?#6qnC%f%YvlyN**gD!OJJVqEnr8fZl7+`(t)?_P0$Ays6jLuRVPoLTo#MPUO*ilbVCj8t_zKqyE+wcmO$g9HI^rmtWmLbI=iz>MH8U2^)u5MUx`v0OLN`-rhbF zt7=mFpwm8ym?I{0`(Pqq2|SrmSOoIW>-1=H5N9Fg_QF4UFgNhq?a6fF_azKHqn^xv X_N6J5gXyOQ00000NkvXXu0mjf{4V(& literal 0 HcmV?d00001 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java index a9d62e399a..083d32b333 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/fragmentmanager/IMogoFragmentManager.java @@ -1,7 +1,5 @@ package com.mogo.service.fragmentmanager; -import androidx.fragment.app.Fragment; - import com.alibaba.android.arouter.facade.template.IProvider; /**