Я создаю приложение, в котором мне нужно разместить ImageView в зависимости от ориентации устройства. Я использую значения от датчиков MagneticField и Accelerometer для расчета ориентации устройства с помощью
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues)
SensorManager.getOrientation(rotationMatrix, values);
double degrees = Math.toDegrees(values[0]);
Моя проблема в том, что позиционирование ImageView очень чувствительно к изменениям ориентации. Постоянное сканирование изображения по экрану. (потому что степени меняются)
Я читал, что это может быть связано с тем, что мое устройство близко к вещам, которые могут повлиять на показания магнитного поля. Но это не единственная причина.
Я попытался загрузить некоторые приложения и обнаружил, что 3D-компас "и" Compass" остается очень устойчивым в своих показаниях (при установке фильтра шума вверх), мне бы хотелось, чтобы в моем приложении было такое же поведение.
Я читал, что могу настроить "шум" моих чтений, добавив " фильтр нижних частот", но я не знаю, как это реализовать (из-за отсутствия математики).
Я надеюсь, что кто-то может помочь мне создать более устойчивое чтение на моем устройстве, где небольшое движение к устройству не повлияет на текущую ориентацию. Прямо сейчас я делаю небольшой
if (Math.abs(lastReadingDegrees - newReadingDegrees) > 1) { updatePosition() }
Для фильтрации помех от шума. Но он не очень хорошо работает:)