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 0000000000..917d15decc Binary files /dev/null and b/modules/mogo-module-search/src/main/res/mipmap-xhdpi/icon_choose_position2.png differ 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; /**