This commit is contained in:
wangcongtao
2019-12-27 21:25:22 +08:00
parent ae9ddcb369
commit 9b93caefda
13 changed files with 184 additions and 162 deletions

View File

@@ -7,20 +7,25 @@ import android.view.MotionEvent;
import android.view.View;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
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.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.AMapNaviViewOptions;
import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoMapView;
import com.mogo.map.impl.amap.location.ALocationClient;
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.location.MogoLocation;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.utils.logger.Logger;
/**
@@ -29,7 +34,7 @@ import com.mogo.utils.logger.Logger;
* <p>
* 代理高德导航地图
*/
public class AMapNaviViewWrapper implements IMogoMapView,
public class AMapNaviViewWrapper implements IMogoMapView, IMogoMapUIController,
AMap.OnMarkerClickListener,
AMap.OnMapLoadedListener,
AMap.OnMapTouchListener,
@@ -47,7 +52,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
public AMapNaviViewWrapper( AMapNaviView mapView ) {
this.mMapView = mapView;
this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView );
this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView, this );
initMapView();
initListeners();
}
@@ -112,6 +117,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
// 2D模式
options.setTilt( 0 );
mMapView.setViewOptions( options );
}
mMapView.setRouteOverlayVisible( false );
mMapView.setNaviMode( AMapNaviView.NORTH_UP_MODE );
@@ -255,9 +261,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
return true;
}
/**
* @param mode 0:车头朝上状态1:正北朝上模式
*/
@Override
public void onNaviMapMode( int i ) {
public void onNaviMapMode( int mode ) {
Logger.i( TAG, "mode=" + mode );
}
@Override
@@ -287,12 +296,10 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override
public void onMapTypeChanged( int type ) {
if ( type == AMap.MAP_TYPE_NAVI ) {
MogoMapListenerHandler.getInstance().onMapModeChanged( EnumMapUI.Type_Navi );
} else if ( type == AMap.MAP_TYPE_NORMAL ) {
MogoMapListenerHandler.getInstance().onMapModeChanged( EnumMapUI.Type_Light );
} else if ( type == AMap.MAP_TYPE_NIGHT ) {
if ( type == 4 ) {
MogoMapListenerHandler.getInstance().onMapModeChanged( EnumMapUI.Type_Light );
} else if ( type == 3 ) {
MogoMapListenerHandler.getInstance().onMapModeChanged( EnumMapUI.Type_Night );
}
}
@@ -300,4 +307,98 @@ public class AMapNaviViewWrapper implements IMogoMapView,
public void onNaviViewShowMode( int i ) {
}
@Override
public void setTrafficEnabled( boolean visible ) {
if ( checkAMapView() ) {
mMapView.setTrafficLine( visible );
}
}
@Override
public void changeZoom( boolean zoom ) {
if ( checkAMapView() ) {
if ( zoom ) {
mMapView.zoomIn();
} else {
mMapView.zoomOut();
}
}
}
@Override
public void changeMapMode( EnumMapUI ui ) {
if ( ui == null ) {
return;
}
if ( checkAMapView() ) {
AMapNaviViewOptions options = mMapView.getViewOptions();
if ( options == null ) {
options = new AMapNaviViewOptions();
}
switch ( ui ) {
case CarUp_2D:
options.setTilt( 0 );
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
break;
case CarUp_3D:
options.setTilt( 60 );
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
break;
case NorthUP_2D:
options.setTilt( 0 );
mMapView.setNaviMode( AMapNaviView.NORTH_UP_MODE );
break;
case Type_Light:
options.setNaviNight( false );
break;
case Type_Night:
options.setNaviNight( true );
break;
}
mMapView.setViewOptions( options );
}
}
private boolean checkAMapView() {
if ( mMapView == null ) {
Logger.e( TAG, "高德mapView实例为空请检查" );
return false;
}
return true;
}
@Override
public void moveToCurrentLocation() {
MogoLocation location = ALocationClient.getInstance( getContext() ).getLastKnowLocation();
if ( location != null ) {
mMapView.getMap().animateCamera( CameraUpdateFactory.newLatLng( new LatLng( location.getLatitude(), location.getLongitude() ) ) );
}
}
@Override
public void showMyLocation( boolean visible ) {
if ( checkAMapView() ) {
mMapView.getMap().setMyLocationEnabled( true );
MyLocationStyle style = mMapView.getMap().getMyLocationStyle();
style.showMyLocation( visible );
style.myLocationIcon( BitmapDescriptorFactory.fromResource( R.drawable.ic_search_poi_location ) );
mMapView.getMap().setMyLocationStyle( style );
}
}
@Override
public void recoverLockMode() {
if ( checkAMapView() ) {
mMapView.recoverLockMode();
}
}
@Override
public void displayOverview() {
if ( checkAMapView() ) {
mMapView.displayOverview();
}
}
}

View File

@@ -11,6 +11,7 @@ import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewOptions;
import com.amap.api.navi.model.AMapNaviMarkerOptions;
import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoUiSettings;
import com.mogo.map.impl.amap.location.ALocationClient;
@@ -33,19 +34,21 @@ import java.util.ArrayList;
* <p>
* 代理高德AMap
*/
public class AMapWrapper implements IMogoMap, IMogoMapUIController {
public class AMapWrapper implements IMogoMap {
private static final String TAG = "AMapWrapper";
private static AMap sAMap;
private IMogoMapUIController mUIcontroller;
private AMap mAMap;
private AMapNaviView mMapView;
private IMogoUiSettings mUiSettings;
public AMapWrapper( AMap map, AMapNaviView mapView ) {
public AMapWrapper( AMap map, AMapNaviView mapView, IMogoMapUIController controller ) {
this.mAMap = map;
sAMap = map;
this.mMapView = mapView;
mUIcontroller = controller;
// 设置实现自定义 info window
mAMap.setInfoWindowAdapter( new AMapInfoWindowAdapter() );
}
@@ -67,7 +70,7 @@ public class AMapWrapper implements IMogoMap, IMogoMapUIController {
@Override
public IMogoMapUIController getUIController() {
return this;
return mUIcontroller;
}
@Override
@@ -194,67 +197,6 @@ public class AMapWrapper implements IMogoMap, IMogoMapUIController {
}
}
@Override
public void setTrafficEnabled( boolean visible ) {
if ( checkAMap() ) {
mAMap.setTrafficEnabled( visible );
}
}
@Override
public void changeZoom( boolean zoom ) {
if ( checkAMapView() ) {
if ( zoom ) {
mMapView.zoomIn();
} else {
mMapView.zoomOut();
}
}
}
@Override
public void changeMapMode( EnumMapUI ui ) {
if ( ui == null ) {
return;
}
if ( checkAMapView() ) {
AMapNaviViewOptions options = mMapView.getViewOptions();
if ( options == null ) {
options = new AMapNaviViewOptions();
}
switch ( ui ) {
case CarUp_2D:
options.setTilt( 0 );
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
break;
case CarUp_3D:
options.setTilt( 60 );
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
break;
case NorthUP_2D:
options.setTilt( 0 );
mMapView.setNaviMode( AMapNaviView.NORTH_UP_MODE );
break;
case Type_Light:
if ( checkAMap() ) {
mAMap.setMapType( AMap.MAP_TYPE_NORMAL );
}
return;
case Type_Night:
if ( checkAMap() ) {
mAMap.setMapType( AMap.MAP_TYPE_NIGHT );
}
return;
case Type_Navi:
if ( checkAMap() ) {
mAMap.setMapType( AMap.MAP_TYPE_NAVI );
}
return;
}
mMapView.setViewOptions( options );
}
}
private boolean checkAMap() {
if ( mAMap == null ) {
Logger.e( TAG, "高德map实例为空请检查" );
@@ -263,51 +205,7 @@ public class AMapWrapper implements IMogoMap, IMogoMapUIController {
return true;
}
private boolean checkAMapView() {
if ( mMapView == null ) {
Logger.e( TAG, "高德mapView实例为空请检查" );
return false;
}
return true;
}
@Override
public void moveToCurrentLocation() {
MogoLocation location = ALocationClient.getInstance( getContext() ).getLastKnowLocation();
if ( location != null ) {
mAMap.animateCamera( CameraUpdateFactory.newLatLng( new LatLng( location.getLatitude(), location.getLongitude() ) ) );
}
}
private Context getContext() {
if ( checkAMapView() ) {
return mMapView.getContext();
}
return null;
}
@Override
public void showMyLocation( boolean visible ) {
if ( checkAMapView() ) {
mAMap.setMyLocationEnabled( true );
MyLocationStyle style = mAMap.getMyLocationStyle();
style.showMyLocation( visible );
style.myLocationIcon( BitmapDescriptorFactory.fromResource( R.drawable.ic_search_poi_location ) );
mAMap.setMyLocationStyle( style );
}
}
@Override
public void recoverLockMode() {
if ( checkAMapView() ) {
mMapView.recoverLockMode();
}
}
@Override
public void displayOverview() {
if ( checkAMapView() ) {
mMapView.displayOverview();
}
return mMapView.getContext();
}
}

View File

@@ -35,6 +35,7 @@ public class NaviClient implements IMogoNavi {
private MogoNaviConfig mMogoNaviConfig = new MogoNaviConfig();
private static volatile NaviClient sInstance;
private boolean mIsRealNavi;
private NaviClient( Context context ) {
mAMapNavi = AMapNavi.getInstance( context );
@@ -119,12 +120,14 @@ public class NaviClient implements IMogoNavi {
}
}
@Override
public void startNavi() {
public void startNavi( boolean isRealNavi ) {
if ( mAMapNaviListener.isStopped() ) {
return;
}
mAMapNavi.startNavi( isRealNavi() ? NaviType.GPS : NaviType.EMULATOR );
mIsRealNavi = isRealNavi;
mAMapNavi.startNavi( isRealNavi ? NaviType.GPS : NaviType.EMULATOR );
}
@Override
@@ -146,10 +149,7 @@ public class NaviClient implements IMogoNavi {
}
public boolean isRealNavi() {
if ( mMogoNaviConfig != null ) {
return mMogoNaviConfig.isRealNavi();
}
return true;
return mIsRealNavi;
}
public void handleClickedPolyline( Polyline polyline ) {