Перейти к содержанию
Fire Monkey от А до Я

Лидеры

Популярный контент

Показан контент с высокой репутацией 07.03.2019 в Сообщения

  1. После получения матрицы, определяете поворот устройства через IFMXScreenService.GetScreenOrientation к примеру, или опять же, напрямую через api. Получаете углы (var x, y: integer; OutMatrix: TJavaArray<single>(16)): 0: ничего не делаем, в т.ч. ремап 90: X := TJSensorManager.JavaClass.AXIS_Y; Y := TJSensorManager.JavaClass.AXIS_MINUS_X; 180: X := TJSensorManager.JavaClass.AXIS_X; Y := TJSensorManager.JavaClass.AXIS_MINUS_Y; 270: X := TJSensorManager.JavaClass.AXIS_MINUS_Y; Y := TJSensorManager.JavaClass.AXIS_X; TJSensorManager.JavaClass.remapCoordinateSystem(FMatrix(изначальная матрица), x, y, OutMatrix) TJSensorManager.JavaClass.getOrientation(OutMatrix, FOrientation)
    2 балла
  2. Ребята, есть проблемы. 1) наши углы - не верные. особенно третий угол- он вообще непонятно что представляет. понимаю, что все что мы делаем - это вызываем стандартные методы (и они вызываются и работают) - но факт остается фактом. 2) проблема, которую описал я после первой компиляции программы- это не проблема ориентации экрана телефона! это другая проблема. моя проблема это то - что при одной и той же портретной ориентации телефона азимут на север изменится на 180% при подьеме телефона на 90 градусов (из горизонтальной плоскости в вертикальную - с той же ориентацией телефона). Для того, чтобы это было понятней - привожу две программы - первая это апк файл из первой статьи этого автора с хабра (где используется устаревший метод) - файл androidsensors.zip вторая программа - это наш проект в "доповоротоном" виде (в первоначальном виде) - файл sensman.zip третья программа - это наша программа с фиксом по ориантации экрана - sensman_fix.zip AndroidSensors.zip SensMan.zip SensMan_fix.zip
    1 балл
  3. Да, все верно, именно об этом и писал.
    1 балл
  4. конечно выложу, если ума хватит )))) откомпилировал Ваше приложение = все работает, получаем данные акселерометра, магнитного датчика и углы (их я перевел в градусы для большей наглядности). но тут наступает вот какой момент (возможно, Вы именно о нем писали, когда упоминали об ориентации экрана)… когда телефон горизонтально (смотришь на экран сверху) - четко видно, что в первом углу = Азимут на север, который меняется от -180 до +180. 0 - север. когда поднимаешь телефон вертикально (смотришь на телефон сбоку) - этот угол "едет" - те он начинает показывать что-то, но не азимут на север. предыдущая статья на хабре этого автора (я тоже читал обе эти статьи когда пытался разобраться сам), где он использует устаревший метод и потом выкладывает апк-шку - так вот в этой предыдущей версии (в ее апк-шке) углы определяются исключительно верно- поднимай телефон, крути, а азимут на север показывается четко. аналогично по двум другим углам. тем этот метод меня и зацепил.... Вы об этом говорили, когда писали про "ориентацию экрана" или имели ввиду что-то другое?
    1 балл
  5. Все на скорую руку. Никаких проверок не делал. Вообще, за основу брал статью с хабра https://habr.com/ru/post/137820/ Так же учтите, что необходимо проверить наличие магнитного датчика, т.к. без него getRotationMatrix всегда будет возвращать false, т.о. не получится определить положение устройства. Так же, еще, getOrientation вернет неправильные значения при повороте телефона, для этого надо определять текущую ориентацию экрана, и на основании этого делать remapCoordinateSystem, и только после этого уже определять положение. Смотрите, принцип понятен. Обертки взял от FMXExpress, немного подчистил, что бы не тянуть лишнего. Если будете брать сами, то обратите внимание: android.hardware.SensorManager: надо изменить JavaSignature на [JavaSignature('android/hardware/SensorManager')] для интерфейса JSensorManager (убрать $ и что после него, иначе, EJNIFatal) android.hardware.SensorEventListener: неправильно унаследованы интерфейсы (от JObject), а так как SensorEventListener это интерфейс, наследуемся от IJavaClass и IJavaInstance соответственно. SensorManager.zip
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...