Android NDK AMotionEvent_getRawX производит отрицательные значения в режиме обратного пейзажа - PullRequest
0 голосов
/ 29 февраля 2020

В настоящее время я пишу Android нативное приложение в C (Visual Studio NativeActivity). У меня возникли проблемы (только только в режиме обратного пейзажа ), когда исходная позиция X моего ввода (как для стилуса, так и для касания) выдает отрицательные числа в левой части экрана, такие как -300.0F , Ниже приводится оператор журнала, который я использую:

log_err("RAW POS:  %f, %f | POS: %f, %f | OFFSET: %f, %f",
    AMotionEvent_getRawX(event, 0), AMotionEvent_getRawY(event, 0),
    AMotionEvent_getX(event, 0), AMotionEvent_getX(event, 0),
    AMotionEvent_getXOffset(event), AMotionEvent_getYOffset(event));

Я также позвонил getLocationOnScreen через JNI на DecorView, и он возвращает int[2] { 0, 0 };, поэтому на экране нет смещения экрана. Посмотреть. У меня такое ощущение, что это как-то связано с собственным статусом и навигационной панелью для устройства, но я не уверен. И в портретной, и в альбомной ориентации (не наоборот) значения X и Y, возвращаемые из AMotionEvent_getRawX и AMotionEvent_getRawY, являются правильными.

Я не делаю ничего фантастического, вот основные c пример того, что я делаю:

int32_t android_handle_input(struct android_app* app, AInputEvent* event)
{
    int32_t evtType = AInputEvent_getType(event);
    if (evtType == AINPUT_EVENT_TYPE_MOTION)
    {
        log_err("RAW POS:  %f, %f | POS: %f, %f | OFFSET: %f, %f",
            AMotionEvent_getRawX(event, 0), AMotionEvent_getRawY(event, 0),
            AMotionEvent_getX(event, 0), AMotionEvent_getX(event, 0),
            AMotionEvent_getXOffset(event), AMotionEvent_getYOffset(event));
        return 1;
    }
    return 0;
}

Вот пример вывода в logcat при касании в верхнем левом углу экрана (не на панели навигации, а только справа от нее) :

RAW POS:  -101.294571, 105.010681 | POS: -101.294571, -101.294571 | OFFSET: -0.000000, -0.000000
RAW POS:  -104.781509, 102.139297 | POS: -104.781509, -104.781509 | OFFSET: -0.000000, -0.000000
RAW POS:  -109.294022, 98.242416 | POS: -109.294022, -109.294022 | OFFSET: -0.000000, -0.000000
RAW POS:  -112.780960, 93.935333 | POS: -112.780960, -112.780960 | OFFSET: -0.000000, -0.000000
RAW POS:  -113.806534, 92.294540 | POS: -113.806534, -113.806534 | OFFSET: -0.000000, -0.000000
RAW POS:  -114.216751, 91.679245 | POS: -114.216751, -114.216751 | OFFSET: -0.000000, -0.000000
RAW POS:  -113.806534, 85.936478 | POS: -113.806534, -113.806534 | OFFSET: -0.000000, -0.000000
RAW POS:  -111.755386, 85.116081 | POS: -111.755386, -111.755386 | OFFSET: -0.000000, -0.000000
RAW POS:  -107.447998, 84.090584 | POS: -107.447998, -107.447998 | OFFSET: -0.000000, -0.000000
RAW POS:  -106.627533, 83.885483 | POS: -106.627533, -106.627533 | OFFSET: -0.000000, -0.000000
RAW POS:  -86.321259, 84.295685 | POS: -86.321259, -86.321259 | OFFSET: -0.000000, -0.000000
RAW POS:  -86.731476, 84.910980 | POS: -86.731476, -86.731476 | OFFSET: -0.000000, -0.000000
RAW POS:  -89.808197, 90.448654 | POS: -89.808197, -89.808197 | OFFSET: -0.000000, -0.000000
RAW POS:  -93.910477, 93.114937 | POS: -93.910477, -93.910477 | OFFSET: -0.000000, -0.000000
RAW POS:  -97.192291, 95.165932 | POS: -97.192291, -97.192291 | OFFSET: -0.000000, -0.000000
RAW POS:  -99.243439, 95.986328 | POS: -99.243439, -99.243439 | OFFSET: -0.000000, -0.000000

Информация об устройстве:

  • Имя: Galaxy Note 8
  • Номер модели: SM-N950U
  • Android Версия: 9

Красный круг на этом снимке экрана - это то место, где я касаюсь (как стилусом, так и сенсорным вводом), которые дают отрицательные значения: enter image description here

...