Получить угол поворота Android по оси X

Я экспериментирую с некоторыми функциями Android. Прямо сейчас я пытаюсь получить угол поворота устройства, поэтому, когда я показываю растровое изображение счастливого лица на холсте, оно всегда выглядит «прямым».

Все, что мне нужно для этого, это получить угол поворота оси x (я думаю), но я не могу найти, как его достичь. Надеюсь, вы можете мне помочь. Спасибо.


person Community    schedule 22.08.2012    source источник
comment
что произойдет, если я использую ваше приложение, когда телефон лежит на плоской поверхности? Все еще будет в порядке?   -  person Simon MᶜKenzie    schedule 23.08.2012
comment
Я проверял на ровной поверхности. Он реагирует правильно даже при малейшем наклоне. Кроме того, цель, для которой я провожу этот тест, вероятно, не в том, чтобы использовать его на плоских поверхностях, но спасибо!   -  person    schedule 23.08.2012


Ответы (2)


Вам доступны азимут, тангаж и крен. Не уверен, какой из них относится к вашей «оси X», но я думаю, что это азимут.

Время полезных ссылок:

  1. http://www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/
  2. http://marakana.com/forums/android/examples/43.html
  3. http://marakana.com/static/tutorials/SensorDemo.zip
person petey    schedule 22.08.2012
comment
Он работает отлично! азимут немного медленный, но работает! Большое спасибо. Единственное, что меня беспокоит, так это то, что SensorListener и SENSOR_ORIENTATION теперь устарели... Это означает, что есть новый способ сделать это, верно? - person ; 23.08.2012
comment
Я должен добавить. Имея в виду пример Marakana, я немного изменил его, чтобы вместо этого использовать SensorEventListener и Sensor.TYPE_ORIENTATION. Ответ стал намного быстрее, и теперь единственным устаревшим объектом является Sensor.TYPE_ORIENTATION. Я пока оставлю это так, так как новое решение намного сложнее и дает тот же результат. Спасибо тебе за все! - person ; 23.08.2012
comment
Обратите внимание, что SENSOR_ORIENTATION устарела. - person MonoThreaded; 16.04.2015

Нашел лучший ответ! (Спасибо forgivegod за помощь в этом!)

ОРИЕНТАЦИЯ теперь устарела и используется для многих ресурсов. Плюс работает с привязкой к магнитному северу, что дает не чистое вращение устройства, а фактически всегда указывает на север.

Используя АКСЕЛЕРОМЕТР, можно рассчитать угол поворота устройства со значениями [0] и [1] следующим образом:

    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        if (event.sensor != mSensor)
            return;

        aX= event.values[0];
        aY= event.values[1];
        //aZ= event.values[2];
        angle = Math.atan2(aX, aY)/(Math.PI/180);
    }

Может быть, это может помочь кому-то еще в будущем. Большое спасибо!

person Community    schedule 23.08.2012
comment
Это верно, если ваше устройство стационарно. - person PKlumpp; 01.12.2015