summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-11-14 10:48:53 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2016-11-14 10:48:53 +0100
commitd310219ed75311d34337dc35bf4bb733326db216 (patch)
tree34b5fc94c920f998c6345d8ea86580d7bdff4e75
parent358ab826e77773b5d2e7ffaa5a2be9bbab9f185e (diff)
downloadqtlocation-mapboxgl-d310219ed75311d34337dc35bf4bb733326db216.tar.gz
[android] - allow using rotate gesture when not tracking user
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java33
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);