Я пытаюсь повернуть пользовательский маркер с ориентацией устройства, используя onSensorChanged
. В моем коде ориентация маркера установлена только по методу onMapReady
и после него не обновляется.
Я понимаю, что ориентация была установлена только на MapReady и никогда не обновляется впоследствии.
Это именно то, что я хочу знать. Как и что мне делать, чтобы маркер всегда получал последнее значение ориентации устройства.
onMapReady
private float markerRotation;
@Override
public void onMapReady( final GoogleMap googleMap ) {
// get current location
GPSTracker mGPS = new GPSTracker( this );
LatLng currentLatLong = new LatLng( mGPS.getLatitude(), mGPS.getLongitude() );
// add marker
googleMap.addMarker( new MarkerOptions()
.position( currentLatLong )
.rotation( markerRotation )
.flat( true )
.icon( BitmapDescriptorFactory
.fromResource( R.drawable.ic_gmap_car_provider ) )
.title( "My Market" ) );
// position camera
googleMap.moveCamera( CameraUpdateFactory.newLatLngZoom( currentLatLong, 17.0f ) );
}
onSensorChanged
@Override
public void onSensorChanged( SensorEvent event ) {
switch ( event.sensor.getType() ) {
case Sensor.TYPE_ACCELEROMETER:
for ( int i = 0; i < 3; i++ ) {
valuesAccelerometer[ i ] = event.values[ i ];
}
break;
case Sensor.TYPE_MAGNETIC_FIELD:
for ( int i = 0; i < 3; i++ ) {
valuesMagneticField[ i ] = event.values[ i ];
}
break;
}
boolean success = SensorManager.getRotationMatrix(
matrixR,
matrixI,
valuesAccelerometer,
valuesMagneticField );
if ( success ) {
SensorManager.getOrientation( matrixR, matrixValues );
double azimuth = Math.toDegrees( matrixValues[ 0 ] );
double pitch = Math.toDegrees( matrixValues[ 1 ] );
double roll = Math.toDegrees( matrixValues[ 2 ] );
markerRotation = (float) azimuth;
}
}