diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java | 99 |
1 files changed, 66 insertions, 33 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java index 5e972c51d6..4e56c6e9c0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java @@ -18,7 +18,10 @@ import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.location.modes.CameraMode; import com.mapbox.mapboxsdk.maps.MapboxMap; -final class LocationCameraController implements MapboxAnimator.OnCameraAnimationsValuesChangeListener { +import java.util.HashSet; +import java.util.Set; + +final class LocationCameraController { @CameraMode.Mode private int cameraMode; @@ -196,44 +199,73 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation onCameraMoveInvalidateListener.onInvalidateCameraMove(); } - @Override - public void onNewLatLngValue(@NonNull LatLng latLng) { - if (cameraMode == CameraMode.TRACKING - || cameraMode == CameraMode.TRACKING_COMPASS - || cameraMode == CameraMode.TRACKING_GPS - || cameraMode == CameraMode.TRACKING_GPS_NORTH) { - setLatLng(latLng); - } - } + private final MapboxAnimator.AnimationsValueChangeListener<LatLng> latLngValueListener = + new MapboxAnimator.AnimationsValueChangeListener<LatLng>() { + @Override + public void onNewAnimationValue(LatLng value) { + setLatLng(value); + } + }; - @Override - public void onNewGpsBearingValue(float gpsBearing) { - boolean trackingNorth = cameraMode == CameraMode.TRACKING_GPS_NORTH - && mapboxMap.getCameraPosition().bearing != 0; + private final MapboxAnimator.AnimationsValueChangeListener<Float> gpsBearingValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + boolean trackingNorth = cameraMode == CameraMode.TRACKING_GPS_NORTH + && mapboxMap.getCameraPosition().bearing == 0; - if (cameraMode == CameraMode.TRACKING_GPS - || cameraMode == CameraMode.NONE_GPS - || trackingNorth) { - setBearing(gpsBearing); + if (!trackingNorth) { + setBearing(value); + } + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> compassBearingValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + if (cameraMode == CameraMode.TRACKING_COMPASS + || cameraMode == CameraMode.NONE_COMPASS) { + setBearing(value); + } + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> zoomValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + setZoom(value); + } + }; + + private final MapboxAnimator.AnimationsValueChangeListener<Float> tiltValueListener = + new MapboxAnimator.AnimationsValueChangeListener<Float>() { + @Override + public void onNewAnimationValue(Float value) { + setTilt(value); + } + }; + + Set<AnimatorListenerHolder> getAnimationListeners() { + Set<AnimatorListenerHolder> holders = new HashSet<>(); + if (isLocationTracking()) { + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_CAMERA_LATLNG, latLngValueListener)); } - } - @Override - public void onNewCompassBearingValue(float compassBearing) { - if (cameraMode == CameraMode.TRACKING_COMPASS - || cameraMode == CameraMode.NONE_COMPASS) { - setBearing(compassBearing); + if (isLocationBearingTracking()) { + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_CAMERA_GPS_BEARING, gpsBearingValueListener)); } - } - @Override - public void onNewZoomValue(float zoom) { - setZoom(zoom); - } + if (isConsumingCompass()) { + holders.add(new AnimatorListenerHolder( + MapboxAnimator.ANIMATOR_CAMERA_COMPASS_BEARING, + compassBearingValueListener)); + } - @Override - public void onNewTiltValue(float tilt) { - setTilt(tilt); + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_ZOOM, zoomValueListener)); + holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_TILT, tiltValueListener)); + return holders; } boolean isTransitioning() { @@ -273,7 +305,8 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation private boolean isLocationBearingTracking() { return cameraMode == CameraMode.TRACKING_GPS - || cameraMode == CameraMode.TRACKING_GPS_NORTH; + || cameraMode == CameraMode.TRACKING_GPS_NORTH + || cameraMode == CameraMode.NONE_GPS; } private void notifyCameraTrackingChangeListener(boolean wasTracking) { |