Автоповорот Google Maps для Android

Я пытаюсь реализовать приложение карты с функцией автоматического поворота (при нажатии на соответствующую кнопку) на основе направления компаса. Я использовал ответ на этот вопрос и адаптировал его к своему проекту: автоповорот карт Android

Поскольку мое устройство не поддерживает Sensor.TYPE_ROTATION_VECTOR, я изменил код, используя Sensor.TYPE_ORIENTATION (устарело). В настоящее время он работает хорошо. Единственная проблема заключается в том, что эффект вращения карты не имеет непрерывности. Анимация работает тряско. Я проверил некоторые другие приложения, и мне понравился их эффект вращения. Их карта плавно вращается.

Для того, чтобы устранить эту проблему, можете ли вы посоветовать улучшение?

Моя реализация такова:

float mDeclination;
private SensorManager mSensorManager;
Sensor sensor;
boolean isCompassOn = false;

private GoogleMap map; // Might be null if Google Play services APK is not available.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mSensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

}


@Override
public void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
}

@Override
public void onPause() {
    mSensorManager.unregisterListener(this);
}

@Override
public void onLocationChanged(Location location) {

    GeomagneticField field = new GeomagneticField(
            (float)location.getLatitude(),
            (float)location.getLongitude(),
            (float)location.getAltitude(),
            System.currentTimeMillis()
    );

    mDeclination = field.getDeclination();
}

@Override
public void onSensorChanged(SensorEvent event) {

    if(event.sensor.getType() == Sensor.TYPE_ORIENTATION && isCompassOn) {
        updateCamera(event.values[0] + mDeclination);
    }
}

private void updateCamera(float bearing) {
    CameraPosition oldPos = map.getCameraPosition();
    CameraPosition pos = CameraPosition.builder(oldPos).bearing(bearing).build();
    GoogleMap.CancelableCallback callback = new GoogleMap.CancelableCallback() {
        @Override
        public void onFinish() {

        }

        @Override
        public void onCancel() {

        }
    };
    map.animateCamera(CameraUpdateFactory.newCameraPosition(pos), 24, callback);
}

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

}

person Dorukhan Arslan    schedule 22.03.2015    source источник
comment
Это может помочь: stackoverflow.com/questions/14320015/android -карты-автоповорот   -  person Andy    schedule 23.03.2015
comment
Я ссылался на ту же ссылку выше.   -  person Dorukhan Arslan    schedule 23.03.2015