Значения датчика силы тяжести Android неверны при изменении ориентации

Я пытаюсь написать живые обои, где объекты падают сверху вниз. Проблема в том, что на планшете (использую nexus 7 и galaxy note) при изменении ориентации экрана мои объекты больше не падают вниз, а идут в неправильном направлении (если повернуть устройство вправо они падают вправо, если я поворачиваю его влево, они падают влево и так далее..).

Я использую датчик гравитации

mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

и я вычисляю квадратный корень силы тяжести по осям X и Y для перемещения объектов.

Как можно сделать так, чтобы объекты всегда падали вниз? Заранее спасибо!

Я добавляю изображение, чтобы лучше объяснить это поведение.

описание


person Lorenzo Barbagli    schedule 02.04.2014    source источник


Ответы (1)


Я нашел простое решение, которое в моем случае работает отлично:

Я написал этот метод для правильного сопоставления значений:

    private void mapSensors(float[] input, float[] output) {
        switch (((WindowManager) getApplicationContext().getSystemService(
                Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation()) {
        case 0:
            output[0] = input[0];
            output[1] = input[1];
            break;
        case 1:
            output[0] = -input[1];
            output[1] = input[0];
            break;
        case 2:
            output[0] = -input[0];
            output[1] = -input[1];
            break;
        case 3:
            output[0] = input[1];
            output[1] = -input[0];
            break;
        }
    }

И метод вызывается так:

    @Override
    public void onSensorChanged(SensorEvent event) {
        mapSensors(event.values, gravity);
    }

Он сопоставляет значения с датчика (event.values) с моим массивом с плавающей запятой (гравитация).

Надеюсь, это может помочь кому-то.

person Lorenzo Barbagli    schedule 02.04.2014