This commit is contained in:
wangcongtao
2020-01-10 20:05:23 +08:00
parent 834a82f902
commit 8b4000ad4a
11 changed files with 104 additions and 21 deletions

View File

@@ -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." );
}
}
}

View File

@@ -289,4 +289,8 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
mMarker.setPositionByPixels( position.x, position.y );
}
}
public Marker getMarker() {
return mMarker;
}
}

View File

@@ -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 );
}
}
}

View File

@@ -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 );
}

View File

@@ -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 );
}
}
}

View File

@@ -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 );
}

View File

@@ -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 );

View File

@@ -26,6 +26,8 @@ import com.mogo.service.fragmentmanager.FragmentDescriptor;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLHandshakeException;
/**
* 搜索页面
* <p>
@@ -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();
}
}

View File

@@ -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 {

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,7 +1,5 @@
package com.mogo.service.fragmentmanager;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.template.IProvider;
/**