This commit is contained in:
wangcongtao
2020-03-31 16:07:30 +08:00
parent 7e36bb64d5
commit 0b0ac71d22
10 changed files with 119 additions and 66 deletions

View File

@@ -640,6 +640,11 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
@Override
public void onCalculateSuccess() {
loseLockMode();
}
@Override
public void onCameraChange( CameraPosition cameraPosition ) {
}

View File

@@ -22,5 +22,9 @@ public class AMapMessageConsts {
* 取消导航
*/
public static final int MSG_NAVI_STOP = 1001;
/**
* 规划路线成功
*/
public static final int MSG_CALCULATE_SUCCESS = 1002;
}

View File

@@ -15,4 +15,6 @@ public interface AMapMessageListener {
void onNaviStopped();
void onNaviInfoUpdat( NaviInfo naviInfo );
void onCalculateSuccess();
}

View File

@@ -84,6 +84,10 @@ public class AMapMessageManager {
sendMessage( AMapMessageConsts.MSG_NAVI_STOP );
}
public void postCalculateSuccess() {
sendMessage( AMapMessageConsts.MSG_CALCULATE_SUCCESS );
}
private synchronized void handleMessage( Message msg ) {
if ( msg == null ) {
return;
@@ -95,6 +99,9 @@ public class AMapMessageManager {
case AMapMessageConsts.MSG_NAVI_STOP:
handleNaviStoppedMsg();
break;
case AMapMessageConsts.MSG_CALCULATE_SUCCESS:
handleCalculateSuccessMsg();
break;
}
}
@@ -115,4 +122,13 @@ public class AMapMessageManager {
listener.onNaviStopped();
}
}
private void handleCalculateSuccessMsg() {
if ( mListeners == null ) {
return;
}
for ( AMapMessageListener listener : mListeners ) {
listener.onCalculateSuccess();
}
}
}

View File

@@ -27,6 +27,7 @@ import com.mogo.map.navi.MogoNaviListenerHandler;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import java.util.List;
@@ -222,8 +223,14 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
super.onCalculateRouteSuccess( aMapCalcRouteResult );
Logger.i( TAG, "导航规划成功" );
setStopped( false );
mNaviOverlayHelper.showCalculatedPaths();
MogoNaviListenerHandler.getInstance().onCalculateSuccess();
WorkThreadHandler.getInstance().post( ()->{
mNaviOverlayHelper.showCalculatedPaths(()->{
UiThreadHandler.post( ()->{
MogoNaviListenerHandler.getInstance().onCalculateSuccess();
AMapMessageManager.getInstance().postCalculateSuccess();
} );
});
} );
}
@Override
@@ -247,6 +254,7 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
if ( mNaviOverlayHelper != null ) {
mNaviOverlayHelper.handleClickedPolyline( polyline, isNaviing() );
mAMapNavi.selectRouteId( mNaviOverlayHelper.getSelectedPathId() );
mNaviOverlayHelper.showBounds();
}
}

View File

@@ -86,18 +86,22 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
/**
* 显示规划的路径
*/
public void showCalculatedPaths() {
public void showCalculatedPaths( Runnable after ) {
clearCalculatedOverlay();
mCalculatePathItems = getSortedPaths();
if ( mCalculatePathItems == null || mCalculatePathItems.isEmpty() ) {
return;
}
addEndPoints();
showPathsBound( getBounds() );
renderPathOverlay( mCalculatePathItems );
showPathsBound( getBounds(), () -> {
addEndPoints();
renderPathOverlay( mCalculatePathItems );
if ( after != null ) {
after.run();
}
} );
}
private LatLngBounds getBounds(){
private LatLngBounds getBounds() {
if ( mCalculatePathItems == null ) {
return null;
}
@@ -164,17 +168,39 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
}
}
public void showBounds() {
showPathsBound( getBounds(), null );
}
/**
* 将规划好的路径显示在视野内
*/
private void showPathsBound( LatLngBounds bounds ) {
private void showPathsBound( LatLngBounds bounds, Runnable after ) {
if ( bounds == null ) {
return;
}
checkAMapInstance();
mAMap.animateCamera(
CameraUpdateFactory.newLatLngBoundsRect( bounds, mBoundRect.left, mBoundRect.right,
mBoundRect.top, mBoundRect.bottom ) );
mAMap.animateCamera( CameraUpdateFactory.newLatLngBoundsRect(
bounds,
mBoundRect.left,
mBoundRect.right,
mBoundRect.top,
mBoundRect.bottom ),
new AMap.CancelableCallback() {
@Override
public void onFinish() {
if ( after != null ) {
after.run();
}
}
@Override
public void onCancel() {
if ( after != null ) {
after.run();
}
}
} );
}
private void checkAMapInstance() {
@@ -414,6 +440,7 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
public void onItemClicked( String tagId ) {
handleClickedPolyline( tagId );
mAMapNavi.selectRouteId( getSelectedPathId() );
showBounds();
}
public OnCalculatePathItemClickInteraction getItemClickInteraction() {