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

@@ -9,6 +9,7 @@ import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -71,6 +72,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView >
private TextView mLocInfo; private TextView mLocInfo;
private TextView mLoc; private TextView mLoc;
private Button m2D3D; private Button m2D3D;
private CheckBox mNaviMode;
private IMogoMarker mLastClickedMarker; private IMogoMarker mLastClickedMarker;
@@ -91,6 +93,8 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView >
@Override @Override
protected void initViews() { protected void initViews() {
mNaviMode = findViewById( R.id.demo_module_id_navi_mode );
mMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation( getContext() ); mMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation( getContext() );
mPoiSearch = mMapService.getPoiSearch( getContext(), new MogoPoiSearchQuery() ); mPoiSearch = mMapService.getPoiSearch( getContext(), new MogoPoiSearchQuery() );
mPoiSearch.setPoiSearchListener( this ); mPoiSearch.setPoiSearchListener( this );
@@ -179,7 +183,7 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView >
findViewById( R.id.demo_module_id_start_navi ).setOnClickListener( new View.OnClickListener() { findViewById( R.id.demo_module_id_start_navi ).setOnClickListener( new View.OnClickListener() {
@Override @Override
public void onClick( View v ) { public void onClick( View v ) {
mNavi.startNavi(); mNavi.startNavi( !mNaviMode.isChecked() );
} }
} ); } );
@@ -231,6 +235,22 @@ public class DemoCardViewFragment extends MvpFragment< IView, Presenter< IView >
mMapUIController.changeMapMode( EnumMapUI.Type_Night ); mMapUIController.changeMapMode( EnumMapUI.Type_Night );
} }
} ); } );
findViewById( R.id.demo_module_id_display_overlay ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
mMapUIController.displayOverview();
}
} );
findViewById( R.id.demo_module_id_reverse_lock ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
mMapUIController.recoverLockMode();
}
} );
} }
@Override @Override

View File

@@ -60,7 +60,7 @@ public class DemoInfoWindowAdapter implements IMogoInfoWindowAdapter {
@Override @Override
public void onClick( View v ) { public void onClick( View v ) {
if ( mNavi != null ) { if ( mNavi != null ) {
mNavi.naviTo( marker.getPosition(), new MogoNaviConfig().realNavi( false ) ); mNavi.naviTo( marker.getPosition(), new MogoNaviConfig() );
} }
} }
} ); } );
@@ -83,7 +83,7 @@ public class DemoInfoWindowAdapter implements IMogoInfoWindowAdapter {
@Override @Override
public void onClick( View v ) { public void onClick( View v ) {
if ( mNavi != null ) { if ( mNavi != null ) {
mNavi.naviTo( marker.getPosition(), new MogoNaviConfig().realNavi( false ) ); mNavi.naviTo( marker.getPosition(), new MogoNaviConfig() );
} }
marker.hideInfoWindow(); marker.hideInfoWindow();
marker.remove(); marker.remove();

View File

@@ -94,6 +94,12 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="停止导航" /> android:text="停止导航" />
<CheckBox
android:id="@+id/demo_module_id_navi_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="模拟导航" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
@@ -130,6 +136,23 @@
android:text="黑夜" /> android:text="黑夜" />
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/demo_module_id_display_overlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全览" />
<Button
android:id="@+id/demo_module_id_reverse_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="继续导航" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -7,20 +7,25 @@ import android.view.MotionEvent;
import android.view.View; import android.view.View;
import com.amap.api.maps.AMap; 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.LatLng;
import com.amap.api.maps.model.Marker; 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.Poi;
import com.amap.api.maps.model.Polyline; import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView; import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener; import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.AMapNaviViewOptions; import com.amap.api.navi.AMapNaviViewOptions;
import com.mogo.map.IMogoMap; import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoMapView; 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.navi.NaviClient;
import com.mogo.map.impl.amap.utils.ObjectUtils; import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.listener.MogoMapListenerHandler; import com.mogo.map.listener.MogoMapListenerHandler;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.utils.logger.Logger; import com.mogo.utils.logger.Logger;
/** /**
@@ -29,7 +34,7 @@ import com.mogo.utils.logger.Logger;
* <p> * <p>
* 代理高德导航地图 * 代理高德导航地图
*/ */
public class AMapNaviViewWrapper implements IMogoMapView, public class AMapNaviViewWrapper implements IMogoMapView, IMogoMapUIController,
AMap.OnMarkerClickListener, AMap.OnMarkerClickListener,
AMap.OnMapLoadedListener, AMap.OnMapLoadedListener,
AMap.OnMapTouchListener, AMap.OnMapTouchListener,
@@ -47,7 +52,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
public AMapNaviViewWrapper( AMapNaviView mapView ) { public AMapNaviViewWrapper( AMapNaviView mapView ) {
this.mMapView = mapView; this.mMapView = mapView;
this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView ); this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView, this );
initMapView(); initMapView();
initListeners(); initListeners();
} }
@@ -112,6 +117,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
// 2D模式 // 2D模式
options.setTilt( 0 ); options.setTilt( 0 );
mMapView.setViewOptions( options ); mMapView.setViewOptions( options );
} }
mMapView.setRouteOverlayVisible( false ); mMapView.setRouteOverlayVisible( false );
mMapView.setNaviMode( AMapNaviView.NORTH_UP_MODE ); mMapView.setNaviMode( AMapNaviView.NORTH_UP_MODE );
@@ -255,9 +261,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
return true; return true;
} }
/**
* @param mode 0:车头朝上状态1:正北朝上模式
*/
@Override @Override
public void onNaviMapMode( int i ) { public void onNaviMapMode( int mode ) {
Logger.i( TAG, "mode=" + mode );
} }
@Override @Override
@@ -287,12 +296,10 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override @Override
public void onMapTypeChanged( int type ) { public void onMapTypeChanged( int type ) {
if ( type == AMap.MAP_TYPE_NAVI ) { if ( type == 4 ) {
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 ) {
MogoMapListenerHandler.getInstance().onMapModeChanged( EnumMapUI.Type_Light ); 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 ) { 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.maps.model.MyLocationStyle;
import com.amap.api.navi.AMapNaviView; import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewOptions; import com.amap.api.navi.AMapNaviViewOptions;
import com.amap.api.navi.model.AMapNaviMarkerOptions;
import com.mogo.map.IMogoMap; import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoUiSettings; import com.mogo.map.IMogoUiSettings;
import com.mogo.map.impl.amap.location.ALocationClient; import com.mogo.map.impl.amap.location.ALocationClient;
@@ -33,19 +34,21 @@ import java.util.ArrayList;
* <p> * <p>
* 代理高德AMap * 代理高德AMap
*/ */
public class AMapWrapper implements IMogoMap, IMogoMapUIController { public class AMapWrapper implements IMogoMap {
private static final String TAG = "AMapWrapper"; private static final String TAG = "AMapWrapper";
private static AMap sAMap; private static AMap sAMap;
private IMogoMapUIController mUIcontroller;
private AMap mAMap; private AMap mAMap;
private AMapNaviView mMapView; private AMapNaviView mMapView;
private IMogoUiSettings mUiSettings; private IMogoUiSettings mUiSettings;
public AMapWrapper( AMap map, AMapNaviView mapView ) { public AMapWrapper( AMap map, AMapNaviView mapView, IMogoMapUIController controller ) {
this.mAMap = map; this.mAMap = map;
sAMap = map; sAMap = map;
this.mMapView = mapView; this.mMapView = mapView;
mUIcontroller = controller;
// 设置实现自定义 info window // 设置实现自定义 info window
mAMap.setInfoWindowAdapter( new AMapInfoWindowAdapter() ); mAMap.setInfoWindowAdapter( new AMapInfoWindowAdapter() );
} }
@@ -67,7 +70,7 @@ public class AMapWrapper implements IMogoMap, IMogoMapUIController {
@Override @Override
public IMogoMapUIController getUIController() { public IMogoMapUIController getUIController() {
return this; return mUIcontroller;
} }
@Override @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() { private boolean checkAMap() {
if ( mAMap == null ) { if ( mAMap == null ) {
Logger.e( TAG, "高德map实例为空请检查" ); Logger.e( TAG, "高德map实例为空请检查" );
@@ -263,51 +205,7 @@ public class AMapWrapper implements IMogoMap, IMogoMapUIController {
return true; 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() { private Context getContext() {
if ( checkAMapView() ) { return mMapView.getContext();
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();
}
} }
} }

View File

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

View File

@@ -58,8 +58,10 @@ public interface IMogoNavi {
/** /**
* 开始导航 * 开始导航
*
* @param isRealNavi true - 实时导航 false - 模拟导航
*/ */
void startNavi(); void startNavi( boolean isRealNavi );
/** /**
* 是否正在导航 * 是否正在导航

View File

@@ -33,13 +33,6 @@ public class MogoNaviConfig {
*/ */
private boolean multipleRoute = true; private boolean multipleRoute = true;
/**
* 是否是正式的导航
* <p>
* false 为模拟导航
*/
private boolean realNavi = true;
/** /**
* 是否躲避拥堵 * 是否躲避拥堵
*/ */
@@ -84,17 +77,6 @@ public class MogoNaviConfig {
return this; return this;
} }
/**
* 导航模式
*
* @param realNavi true - 正式导航, false - 模拟导航
* @return
*/
public MogoNaviConfig realNavi( boolean realNavi ) {
this.realNavi = realNavi;
return this;
}
public boolean isCongestion() { public boolean isCongestion() {
return congestion; return congestion;
} }
@@ -114,8 +96,4 @@ public class MogoNaviConfig {
public boolean isMultipleRoute() { public boolean isMultipleRoute() {
return multipleRoute; return multipleRoute;
} }
public boolean isRealNavi() {
return realNavi;
}
} }

View File

@@ -30,12 +30,7 @@ public enum EnumMapUI {
/** /**
* 夜晚模式 * 夜晚模式
*/ */
Type_Night( 4, 3 ), Type_Night( 4, 3 );
/**
* 导航模式
*/
Type_Navi( 5, 5 );
private int next; private int next;
private int code; private int code;

View File

@@ -82,9 +82,9 @@ public class MogoNavi implements IMogoNavi {
} }
@Override @Override
public void startNavi() { public void startNavi( boolean isRealNavi ) {
if ( mDelegate != null ) { if ( mDelegate != null ) {
mDelegate.startNavi(); mDelegate.startNavi( isRealNavi );
} }
} }

View File

@@ -38,7 +38,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mMogoMapService.registerHostMapListener( mMogoModuleHandler ); mMogoMapService.registerHostMapListener( mMogoModuleHandler );
mMogoMapService.registerHostNaviListener( mMogoModuleHandler ); mMogoMapService.registerHostNaviListener( mMogoModuleHandler );
} }
mMogoModuleHandler.loadMap( R.id.module_main_id_map_container ); mMogoModuleHandler.loadMap( R.id.module_main_id_map_fragment_container );
Collection< IMogoModuleProvider > providers = mMogoModuleHandler.loadCards(); Collection< IMogoModuleProvider > providers = mMogoModuleHandler.loadCards();
for ( IMogoModuleProvider provider : providers ) { for ( IMogoModuleProvider provider : providers ) {

View File

@@ -12,7 +12,7 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<FrameLayout <FrameLayout
android:id="@+id/module_main_id_map_container" android:id="@+id/module_main_id_map_fragment_container"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintLeft_toRightOf="@+id/module_main_id_fragment_container" app:layout_constraintLeft_toRightOf="@+id/module_main_id_fragment_container"

View File

@@ -96,7 +96,12 @@ public interface IMogoMapService extends IProvider, IMogoMapListenerRegister, IM
* *
* @return * @return
*/ */
IMogoMarkerManager getMarkerManager(Context context); IMogoMarkerManager getMarkerManager( Context context );
/**
* 地图UI控制
*
* @return
*/
IMogoMapUIController getMapUIController(); IMogoMapUIController getMapUIController();
} }