2016-10-24 2 views
1

В настоящее время я использую Карты Google на Android, но я не уверен, как повернуть карту, чтобы показать текущее направление просмотра пользователей.Текущее местоположение Google Maps Google

Когда я установил:

mMap.setMyLocationEnabled(true); 

Я заметил, что текущий маркер имеет малую несущую стрелу (при наклоне телефона и т.д.).

@Override 
public void onLocationChanged(Location location) { 
    handleNewLocation(location); 
} 

private void handleNewLocation(Location location) { 
    Log.d(TAG, location.toString()); 

    double currentLatitude = location.getLatitude(); 
    double currentLongitude = location.getLongitude(); 

    LatLng latLng = new LatLng(currentLatitude, currentLongitude); 

    CameraPosition camPos = new CameraPosition.Builder() 
      .target(latLng) 
      .zoom(16.0f) 
      .bearing(location.getBearing()) 
      .build(); 

    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(camPos)); 
} 

Это успешно обновляет положение маркеров на карте в зависимости от местоположения. Однако, как я могу изменить направление движения маркера, повернув карту, на основе наклона наклона телефона.

ответ

1

Попробуйте этот код:

private SensorManager mSensorManager; 
private SensorEventListener sensorEventListener; 
private Sensor accelerometer; 
private Sensor magnetometer; 
private float[] mGravity; 
private float[] mGeomagnetic; 
private Float azimut; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_activity); 

    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
    sensorEventListener= new SensorEventListener() { 
     @Override 
     public void onSensorChanged(SensorEvent event) { 

      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
       mGravity = event.values; 
      if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) 
       mGeomagnetic = event.values; 
      if (mGravity != null && mGeomagnetic != null) { 
       float R[] = new float[9]; 
       float I[] = new float[9]; 
       boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic); 
       if (success) { 
        float orientation[] = new float[3]; 
        SensorManager.getOrientation(R, orientation); 
        azimut = orientation[0]; // orientation contains: azimut, pitch and roll 
        float degrees = (float) Math.toDegrees(azimut); 
        /** 
        * TRY THIS TO UPDATE YOUR CAMERA 
        * degrees you can use as bearing 
        * CameraPosition cameraPosition = new CameraPosition(myLatLng, 15, 0, degrees); 
        * map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition),200, null); 
        **/ 
       } 
      } 
     } 

     @Override 
     public void onAccuracyChanged(Sensor sensor, int accuracy) { 

     } 
    }; 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(sensorEventListener); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_UI); 
    mSensorManager.registerListener(sensorEventListener, magnetometer, SensorManager.SENSOR_DELAY_UI); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^