diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-11-14 10:48:53 +0100 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2016-11-14 10:48:53 +0100 |
commit | d310219ed75311d34337dc35bf4bb733326db216 (patch) | |
tree | 34b5fc94c920f998c6345d8ea86580d7bdff4e75 | |
parent | 358ab826e77773b5d2e7ffaa5a2be9bbab9f185e (diff) | |
download | qtlocation-mapboxgl-d310219ed75311d34337dc35bf4bb733326db216.tar.gz |
[android] - allow using rotate gesture when not tracking user
2 files changed, 20 insertions, 15 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 1b24f61d04..b4580272c3 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 float bearing; - private float tilt; + 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; @@ -266,7 +267,7 @@ public class MyLocationView extends View { // put camera in position camera.save(); - camera.rotate(tilt, 0, 0); + camera.rotate((float) tilt, 0, 0); camera.getMatrix(matrix); if (myBearingTrackingMode != MyBearingTracking.NONE && directionAnimator != null) { @@ -313,7 +314,14 @@ public class MyLocationView extends View { } public void setBearing(double bearing) { - this.bearing = (float) 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) { @@ -385,7 +393,7 @@ public class MyLocationView extends View { protected Parcelable onSaveInstanceState() { Bundle bundle = new Bundle(); bundle.putParcelable("superState", super.onSaveInstanceState()); - bundle.putFloat("tilt", tilt); + bundle.putDouble("tilt", tilt); return bundle; } @@ -451,6 +459,8 @@ public class MyLocationView extends View { if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) { // always face north setCompass(0); + } else { + myLocationBehavior.invalidate(); } } invalidate(); @@ -475,7 +485,7 @@ public class MyLocationView extends View { invalidate(); } - private void setCompass(float bearing) { + private void setCompass(double bearing) { float oldDir = previousDirection; if (directionAnimator != null) { oldDir = (Float) directionAnimator.getAnimatedValue(); @@ -483,7 +493,7 @@ public class MyLocationView extends View { directionAnimator = null; } - float newDir = bearing; + float newDir = (float) bearing; float diff = oldDir - newDir; if (diff > 180.0f) { newDir += 360.0f; @@ -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); |