diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java index 92b4288c3b..e8e1f875b0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java @@ -32,6 +32,8 @@ import com.mapbox.mapboxsdk.maps.MapboxMap.OnMapClickListener; import com.mapbox.mapboxsdk.maps.Style; import java.lang.ref.WeakReference; +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import static android.Manifest.permission.ACCESS_COARSE_LOCATION; @@ -698,6 +700,10 @@ public final class LocationComponent { updateLocation(location, false); } + public void setMaxAnimationFps(int maxAnimationFps) { + locationAnimatorCoordinator.setMaxAnimationFps(maxAnimationFps); + } + /** * Set the location engine to update the current user location. * <p> @@ -989,7 +995,7 @@ public final class LocationComponent { LayerFeatureProvider featureProvider = new LayerFeatureProvider(); LayerBitmapProvider bitmapProvider = new LayerBitmapProvider(context); locationLayerController = new LocationLayerController(mapboxMap, style, sourceProvider, featureProvider, - bitmapProvider, options); + bitmapProvider, options, renderModeChangedListener); locationCameraController = new LocationCameraController( context, mapboxMap, cameraTrackingChangedListener, options, onCameraMoveInvalidateListener); @@ -997,8 +1003,6 @@ public final class LocationComponent { mapboxMap.getProjection(), MapboxAnimatorSetProvider.getInstance() ); - locationAnimatorCoordinator.addLayerListener(locationLayerController); - locationAnimatorCoordinator.addCameraListener(locationCameraController); locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options .trackingAnimationDurationMultiplier()); @@ -1164,6 +1168,13 @@ public final class LocationComponent { locationAnimatorCoordinator.feedNewAccuracyRadius(Utils.calculateZoomLevelRadius(mapboxMap, location), noAnimation); } + private void updateAnimatorListenerHolders() { + Set<AnimatorListenerHolder> animationsValueChangeListeners = new HashSet<>(); + animationsValueChangeListeners.addAll(locationLayerController.getAnimationListeners()); + animationsValueChangeListeners.addAll(locationCameraController.getAnimationListeners()); + locationAnimatorCoordinator.updateAnimatorListenerHolders(animationsValueChangeListeners); + } + @NonNull private OnCameraMoveListener onCameraMoveListener = new OnCameraMoveListener() { @Override @@ -1298,12 +1309,23 @@ public final class LocationComponent { public void onCameraTrackingChanged(int currentMode) { locationAnimatorCoordinator.cancelZoomAnimation(); locationAnimatorCoordinator.cancelTiltAnimation(); + updateAnimatorListenerHolders(); + locationAnimatorCoordinator.resetAllCameraAnimations(mapboxMap.getCameraPosition(), + locationCameraController.getCameraMode() == CameraMode.TRACKING_GPS_NORTH); for (OnCameraTrackingChangedListener listener : onCameraTrackingChangedListeners) { listener.onCameraTrackingChanged(currentMode); } } }; + @NonNull + private OnRenderModeChangedListener renderModeChangedListener = new OnRenderModeChangedListener() { + @Override + public void onRenderModeChanged(int currentMode) { + updateAnimatorListenerHolders(); + } + }; + static class InternalLocationEngineProvider { LocationEngine getBestLocationEngine(@NonNull Context context, boolean background) { return LocationEngineProvider.getBestLocationEngine(context, background); |