Android Maps v2 rotate mapView with compass
F

2

11

I'm developing an app which needs to rotate the mapView with a compass. I know how to rotate the camera but I need to rotate the mapView with the compass. the center point should be the current location. I found codes for Maps V1 but I need to do it with Maps V2

Fidellia answered 8/2, 2013 at 6:57 Comment(0)
F
24

OK, i figured it out myself. first you need to calculate the bearing from the compass. then the Maps api-2 camera can be rotated.

public void updateCamera(float bearing) {
            CameraPosition currentPlace = new CameraPosition.Builder()
                    .target(new LatLng(centerLatitude, centerLongitude))
                    .bearing(bearing).tilt(65.5f).zoom(18f).build();
            googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(currentPlace));

    }

set SensorListener in your code and call this method in onSensorChanged event. i have added a tilt value so the map will rotate in 3D.

Fidellia answered 12/2, 2013 at 11:16 Comment(6)
Not that it matters too much, but .bearing is a float.Yardmaster
How do you get bearing?Cord
If you are using GoogleMap instead of MapView, you can use the mMap.setOnMyLocationChangeListener event.Marigolde
How can we do this in V3? Please suggest. Also, I have posted similar question in order to rotate map 360 Degree by changing bearing 3 times (each time by 120 Degree to rotate 1 cycle around a center point) but there are easing and jerks. How can I avoid that. #48124238Hodman
Sure would be nice if you would show how you got the bearing, pretty important piece if information.Burseraceous
You can get bearing value form the Location (Current location) return by the location provider.Fluctuant
R
3

in your GoogleMap object you can access getMyLocation method. This last returns a Location object which contains getBearing method. This one returns a float [0..360] computed from last known location and current location, 0° is the north axis, rotation is in the clock sens.

To resume, you can use a code like:

GoogleMap gMap = ..... 
float bearing = gMap.getMyLocation().getBearing();
CameraPosition newCamPos = new CameraPosition(latLngObject,
            zoomValue,
            tiltValue,
            bearing);
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), durationValue, null);
Rome answered 7/7, 2016 at 13:42 Comment(1)
How can we do this in V3? Please suggest. Also I have posted similar question in order to rotate map 360 Degree by changing bearing 3 times (each time by 120 Degree to rotate 1 cycle around a center point) but there are easing and jerks. How can I avoid that. #48124238Hodman

© 2022 - 2024 — McMap. All rights reserved.