Android使用onSensorChanged旋转标记

时间:2019-04-15 09:51:37

标签: android android-sensors sensormanager

我正在尝试使用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;

    }

}

0 个答案:

没有答案