I am using the Google Maps Android API v2 where I display my Device location as a GoogleMap Marker on a Map. I have a listener (LocationServices.FusedLocationApi.requestLocationUpdates...) attach to the Map in order to handle every GPS location change. Every time I receive a new location I update the Marker (my position) as well as the Camera on the Map and pretty much it shows like I am moving as I drive.
However... I need some help in order to have the MAP rotate and/or display on the same direction that I am moving to. I mean, while I drive I need to rotate the MAP where I can see on my map-left-side what I have on my real-life-left-side, and so the same with the right. Since the MAP direction is static, the Marker (Me) is moving on it but most of the time the direction does not match my car real-time direction.
What should I do with the Map in order to accomplish this visual effect?
Open the Google Maps app. Search for a place or allow Google Maps to auto-detect your location. Place two fingers on the map and rotate in any direction. Google Maps displays a tiny compass on the screen that moves with the orientation of the map.
Enable Auto-Rotate You can enable it on Android by bringing down the Quick Settings panel and tapping on the Auto-rotate option. Likewise, iPhone users can also disable portrait orientation lock from the Control Center. To do that, swipe down from the top right corner of the screen and tap on the Rotation Lock button.
Check the auto-rotate settings If you're using Google Maps to navigate while you're driving, make sure the Android Auto is left out of battery settings as well. ⇒ Note: If you're driving, you can only change from north up to car direction after you set the destination.
I was guessing how is posible that the Google Map API does not provide such common visual effect desire. I was wrong... it's called BEARING.
private void updateCameraBearing(GoogleMap googleMap, float bearing) {
if ( googleMap == null) return;
CameraPosition camPos = CameraPosition
.builder(
googleMap.getCameraPosition() // current Camera
)
.bearing(bearing)
.build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(camPos));
}
Since I setup my location changes to be notified every 2 seconds...
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(POLLING_FREQ_2SECONDS)
.setFastestInterval(FASTEST_UPDATE_FREQ_2_SECONDS)
I use that same place to process the new location as well as to update the Camera (new BEARING):
public void onLocationChanged(Location location) {
// ... process location
updateCameraBearing(googleMap, location.getBearing());
}
TESTED + WORKING = DONE!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With