Маркер поворота Android с помощью onSensorChanged - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь повернуть пользовательский маркер с ориентацией устройства, используя 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;

    }

}
...