В настоящее время я пишу 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
Красный круг на этом снимке экрана - это то место, где я касаюсь (как стилусом, так и сенсорным вводом), которые дают отрицательные значения: