Trả lời

18

OK, tôi đã tự tìm ra. đầu tiên bạn cần tính toán vòng bi từ la bàn. thì có thể xoay camera api-2 của Maps.

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

    } 

đặt SensorListener trong mã của bạn và gọi phương thức này trong sự kiện onSensorChanged. tôi đã thêm giá trị nghiêng để bản đồ sẽ xoay vòng ở chế độ 3D.

+0

Không phải là nó quan trọng quá nhiều, nhưng .bearing là một phao. – Chrispix

+4

Làm thế nào để bạn có được mang? – sealskej

+0

Nếu bạn đang sử dụng GoogleMap thay vì MapView, bạn có thể sử dụng sự kiện mMap.setOnMyLocationChangeListener. –

2

trong đối tượng GoogleMap của bạn, bạn có thể truy cập phương thức getMyLocation. Điều này trả về một đối tượng Location có chứa phương thức getBearing. Cái này trả về một phao [0..360] được tính từ vị trí đã biết cuối cùng và vị trí hiện tại, 0 ° là trục bắc, xoay là trong cảm giác đồng hồ.

Để tiếp tục, bạn có thể sử dụng một mã như:

GoogleMap gMap = ..... 
float bearing = gMap.getMyLocation().getBearing(); 
CameraPosition newCamPos = new CameraPosition(latLngObject, 
      zoomValue, 
      tiltValue, 
      bearing); 
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), durationValue, null); 
+0

Làm thế nào chúng ta có thể làm điều này trong V3? Xin đề nghị. Ngoài ra tôi đã đăng câu hỏi tương tự để xoay bản đồ 360 độ bằng cách thay đổi vòng bi 3 lần (mỗi lần bằng 120 độ để xoay 1 vòng quanh điểm trung tâm) nhưng có giảm bớt và giật. Làm thế nào tôi có thể tránh điều đó. https://stackoverflow.com/questions/48123738/gmap-bearing-rotation-in-smooth-motion –