Intereting Posts
Android WebKit сфокусированный текст не будет рисовать фоновое изображение Android: Как получить пользовательский вид, чтобы частично перерисовать? SwipeRefreshLayout скрыт за ActionBar с прозрачными барами состояния Android loopj Async Http падает после обновления 1.4.5 Как работает метод getView () при создании собственного адаптера? Сколько FFT в секунду можно делать на моем смартфоне? (Для выполнения распознавания голоса) Какой метод активности вызывается при изменении ориентации? Как приостановить и возобновить поток surfaceView API Android Google Maps v2: визуализация радиуса поиска с помощью ValueAnimator Как установить более старую версию Android Studio Как рассчитать расстояние, основанное на ускорении телефона Преобразование битмапа в jpeg в android Структура сервера REST для Android Использование SupportToolbar для макета телефона и отдельной панели действий для компоновки планшета Магазин приложений amazon и лицензирование Android

Как измерить наклон телефона в плоскости XY с помощью акселерометра в Android

Я попытался использовать данные оси Z из SensorEvent.values, но он не обнаруживает вращения моего телефона в плоскости XY, т.е. Вокруг оси Z.

Я использую это как ссылку для координатных осей. Правильно ли это?

оси

Как измерить это движение с использованием значений акселерометра?

Эти игры делают что-то подобное: Extreme Skater , Doodle Jump.

PS: моя ориентация телефона будет пейзаж.

Solutions Collecting From Web of "Как измерить наклон телефона в плоскости XY с помощью акселерометра в Android"

По существу, здесь есть два случая: устройство лежит плоское, а не плоское. Плоскость здесь означает, что угол между поверхностью экрана устройства и плоскостью мира xy (я называю это наклоном) составляет менее 25 градусов или больше 155 градусов. Подумайте о том, что телефон лежит ровно или слегка наклонен немного от стола.

Сначала вам нужно нормализовать вектор акселерометра.
То есть, если g – это вектор, возвращаемый значениями события датчика акселерометра. В коде

float[] g = new float[3]; g = event.values.clone(); double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]); // Normalize the accelerometer vector g[0] = g[0] / norm_Of_g g[1] = g[1] / norm_Of_g g[2] = g[2] / norm_Of_g 

Тогда наклон можно рассчитать как

 int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2]))); 

таким образом

 if (inclination < 25 || inclination > 155) { // device is flat } else { // device is not flat } 

В случае прокладки квартиры вам необходимо использовать компас, чтобы узнать, сколько устройство вращается из исходного положения.

Для случая не плоского вращения (наклона) рассчитывается следующим образом

 int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1]))); 

Теперь вращение = 0 означает, что устройство находится в нормальном положении. Это портрет без какого-либо наклона для большинства телефонов и, возможно, для планшета. Поэтому, если вы держите телефон как на картинке выше и начинаете вращаться, вращение изменится, и когда телефон будет в пейзаже, вращение будет 90 или -90 зависит от направления вращения.