diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-11-14 10:37:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-14 10:37:34 +0100 |
commit | fa6d5864177bfb68e99f8732068a3402cc5aadfd (patch) | |
tree | c1e498a0858795e2eb2c7c7cf5d3c46c54503ebc /platform | |
parent | a7fa97e8a36bec7c5d6ec5ae43203012e3357cd9 (diff) | |
download | qtlocation-mapboxgl-fa6d5864177bfb68e99f8732068a3402cc5aadfd.tar.gz |
[android] - allow using rotate gesture when not tracking user location, correctly update bearing during rotation gesture (#6978)
Diffstat (limited to 'platform')
2 files changed, 14 insertions, 9 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java index 474af19853..c32d4a8906 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java @@ -199,7 +199,7 @@ public class TrackingSettings { // The user settings are enabled AND; // EITHER bearing tracking is dismissed on gesture OR there is no bearing tracking return uiSettings.isRotateGesturesEnabled() && - (dismissBearingTrackingOnGesture || myBearingTrackingMode == MyBearingTracking.NONE); + (dismissBearingTrackingOnGesture || myBearingTrackingMode == MyBearingTracking.NONE || (myLocationTrackingMode == MyLocationTracking.TRACKING_NONE)); } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 15733eb93c..9d3c21c6e6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -92,8 +92,9 @@ public class MyLocationView extends View { private PointF screenLocation; // camera vars - private double bearing; private double tilt; + private double bearing; + private float magneticHeading; // Controls the compass update rate in milliseconds private static final int COMPASS_UPDATE_RATE_MS = 500; @@ -314,6 +315,13 @@ public class MyLocationView extends View { public void setBearing(double bearing) { this.bearing = bearing; + if (myLocationTrackingMode == MyLocationTracking.TRACKING_NONE) { + if (myBearingTrackingMode == MyBearingTracking.GPS) { + setCompass(location.getBearing() - bearing); + } else if (myBearingTrackingMode == MyBearingTracking.COMPASS) { + setCompass(magneticHeading - bearing); + } + } } public void setCameraPosition(CameraPosition position) { @@ -451,6 +459,8 @@ public class MyLocationView extends View { if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) { // always face north setCompass(0); + } else { + myLocationBehavior.invalidate(); } } invalidate(); @@ -572,14 +582,14 @@ public class MyLocationView extends View { SensorManager.getRotationMatrixFromVector(matrix, event.values); SensorManager.getOrientation(matrix, orientation); - float magneticHeading = (float) Math.toDegrees(SensorManager.getOrientation(matrix, orientation)[0]); + magneticHeading = (float) Math.toDegrees(SensorManager.getOrientation(matrix, orientation)[0]); if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) { // Change the user location view orientation to reflect the device orientation rotateCamera(magneticHeading); setCompass(0); } else { // Change compass direction - setCompass(magneticHeading); + setCompass(magneticHeading - bearing); } compassUpdateNextTimestamp = currentTime + COMPASS_UPDATE_RATE_MS; @@ -730,11 +740,6 @@ public class MyLocationView extends View { // update LatLng location LatLng newLocation = new LatLng(location); - // update LatLng direction - if (myBearingTrackingMode == MyBearingTracking.GPS && location.hasBearing()) { - setCompass(location.getBearing() + bearing); - } - // update LatLng accuracy updateAccuracy(location); |