summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-05-07 17:42:16 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-05-09 19:43:49 +0200
commit6fa1d357b384fd347c5a7a83586cd923128ff52e (patch)
tree0aefcd2be3509cb5e90c6d3ccbef2c3c08ec9ecf /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk
parentdbfab81e2c15b78da4bab17f182742a78e4433b7 (diff)
downloadqtlocation-mapboxgl-6fa1d357b384fd347c5a7a83586cd923128ff52e.tar.gz
[android] option to provide custom values for location camera transition
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java28
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java41
2 files changed, 62 insertions, 7 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 b9aa371a47..6c1b6b4fd6 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
@@ -21,6 +21,8 @@ import com.mapbox.mapboxsdk.maps.MapboxMap;
import java.util.HashSet;
import java.util.Set;
+import static com.mapbox.mapboxsdk.location.LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS;
+
final class LocationCameraController {
@CameraMode.Mode
@@ -87,10 +89,12 @@ final class LocationCameraController {
}
void setCameraMode(@CameraMode.Mode int cameraMode) {
- setCameraMode(cameraMode, null, null);
+ setCameraMode(cameraMode, null, TRANSITION_ANIMATION_DURATION_MS, null, null, null, null);
}
void setCameraMode(@CameraMode.Mode final int cameraMode, @Nullable Location lastLocation,
+ long transitionDuration,
+ @Nullable Double zoom, @Nullable Double bearing, @Nullable Double tilt,
@Nullable OnLocationCameraTransitionListener internalTransitionListener) {
final boolean wasTracking = isLocationTracking();
this.cameraMode = cameraMode;
@@ -101,7 +105,8 @@ final class LocationCameraController {
adjustGesturesThresholds();
notifyCameraTrackingChangeListener(wasTracking);
- transitionToCurrentLocation(wasTracking, lastLocation, internalTransitionListener);
+ transitionToCurrentLocation(
+ wasTracking, lastLocation, transitionDuration, zoom, bearing, tilt, internalTransitionListener);
}
/**
@@ -109,13 +114,26 @@ final class LocationCameraController {
* Notifies an internal listener when the transition's finished to invalidate animators and notify external listeners.
*/
private void transitionToCurrentLocation(boolean wasTracking, Location lastLocation,
+ long transitionDuration,
+ Double zoom, Double bearing, Double tilt,
final OnLocationCameraTransitionListener internalTransitionListener) {
if (!wasTracking && isLocationTracking() && lastLocation != null) {
isTransitioning = true;
LatLng target = new LatLng(lastLocation);
+
CameraPosition.Builder builder = new CameraPosition.Builder().target(target);
- if (isLocationBearingTracking()) {
- builder.bearing(cameraMode == CameraMode.TRACKING_GPS_NORTH ? 0 : lastLocation.getBearing());
+ if (zoom != null) {
+ builder.zoom(zoom);
+ }
+ if (tilt != null) {
+ builder.tilt(tilt);
+ }
+ if (bearing != null) {
+ builder.bearing(bearing);
+ } else {
+ if (isLocationBearingTracking()) {
+ builder.bearing(cameraMode == CameraMode.TRACKING_GPS_NORTH ? 0 : lastLocation.getBearing());
+ }
}
CameraUpdate update = CameraUpdateFactory.newCameraPosition(builder.build());
@@ -145,7 +163,7 @@ final class LocationCameraController {
} else {
mapboxMap.animateCamera(
update,
- (int) LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS,
+ (int) transitionDuration,
callback);
}
} else {
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 d643795c04..47210ee0ba 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
@@ -43,6 +43,7 @@ import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_F
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_INTERVAL_MILLIS;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_TRACKING_TILT_ANIM_DURATION;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_TRACKING_ZOOM_ANIM_DURATION;
+import static com.mapbox.mapboxsdk.location.LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS;
/**
* The Location Component provides location awareness to your mobile application. Enabling this
@@ -524,7 +525,6 @@ public final class LocationComponent {
* @param cameraMode one of the modes found in {@link CameraMode}
*/
public void setCameraMode(@CameraMode.Mode int cameraMode) {
- checkActivationState();
setCameraMode(cameraMode, null);
}
@@ -550,8 +550,45 @@ public final class LocationComponent {
*/
public void setCameraMode(@CameraMode.Mode int cameraMode,
@Nullable OnLocationCameraTransitionListener transitionListener) {
+ setCameraMode(cameraMode, TRANSITION_ANIMATION_DURATION_MS, null, null, null, transitionListener);
+ }
+
+ /**
+ * Sets the camera mode, which determines how the map camera will track the rendered location.
+ * <p>
+ * When camera is transitioning to a new mode, it will reject inputs like {@link #zoomWhileTracking(double)} or
+ * {@link #tiltWhileTracking(double)}.
+ * Use {@link OnLocationCameraTransitionListener} to listen for the transition state.
+ * <p>
+ * Set values of zoom, bearing and tilt that the camera will transition to. If null is passed to any of those,
+ * current value will be used for that parameter instead.
+ * If the camera is already tracking, provided values are ignored.
+ * <p>
+ * <ul>
+ * <li>{@link CameraMode#NONE}: No camera tracking</li>
+ * <li>{@link CameraMode#NONE_COMPASS}: Camera does not track location, but does track compass bearing</li>
+ * <li>{@link CameraMode#NONE_GPS}: Camera does not track location, but does track GPS bearing</li>
+ * <li>{@link CameraMode#TRACKING}: Camera tracks the user location</li>
+ * <li>{@link CameraMode#TRACKING_COMPASS}: Camera tracks the user location, with bearing provided by a compass</li>
+ * <li>{@link CameraMode#TRACKING_GPS}: Camera tracks the user location, with normalized bearing</li>
+ * <li>{@link CameraMode#TRACKING_GPS_NORTH}: Camera tracks the user location, with bearing always set to north</li>
+ * </ul>
+ *
+ * @param cameraMode one of the modes found in {@link CameraMode}
+ * @param transitionDuration duration of the transition in milliseconds
+ * @param zoom target zoom, set to null to use current camera position
+ * @param bearing target bearing, set to null to use current camera position
+ * @param tilt target tilt, set to null to use current camera position
+ * @param transitionListener callback that's going to be invoked when the transition animation finishes
+ */
+ public void setCameraMode(@CameraMode.Mode int cameraMode,
+ long transitionDuration,
+ @Nullable Double zoom, @Nullable Double bearing, @Nullable Double tilt,
+ @Nullable OnLocationCameraTransitionListener transitionListener) {
checkActivationState();
- locationCameraController.setCameraMode(cameraMode, lastLocation, new CameraTransitionListener(transitionListener));
+ locationCameraController.setCameraMode(
+ cameraMode, lastLocation, transitionDuration, zoom, bearing, tilt,
+ new CameraTransitionListener(transitionListener));
updateCompassListenerState(true);
}