[android] - allow using rotate gesture when not tracking user location, correctly update bearing during rotation gesture (#6978)

This commit is contained in:
Tobrun
2016-11-14 10:37:34 +01:00
committed by GitHub
parent a7fa97e8a3
commit fa6d586417
2 changed files with 14 additions and 9 deletions

View File

@@ -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));
}
/**

View File

@@ -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);