[android] - allow using rotate gesture when not tracking user location, correctly update bearing during rotation gesture (#6978)
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user