我正在尝试使用onSensorChanged
以设备方向旋转自定义标记。在我的代码中,标记方向仅在onMapReady
方法上设置,之后没有更新。
我知道方向仅在MapReady上设置,以后再也不会更新。
这正是我想知道的。我该如何以及该怎么做,标记将始终获得最新的设备方向值。
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 ) );
}
@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;
}
}