Как получить точные координаты из /dev/input/event0 ⇐ Android
-
Гость
Как получить точные координаты из /dev/input/event0
Я работаю над обработкой события ввода с помощью своей собственной программы на Android без Eventthub&InputReader, и код работал на экране с одним касанием, но не может работать на экране с несколькими касаниями, ниже приведены мои коды (частично):
р>
int readSize = read(mInputTouchfd, mEventData, EVS_READ_EVENT_MAX_NUM * sizeof(struct input_event)); если (readSize >= (int)sizeof(struct input_event)) { int eventNum = readSize/sizeof(struct input_event); LOG1("HandleTouchEvent прочитал событие ввода %d", eventNum); for (int я = 0; я dispatchTouchEvent(buttonEvent, Realx, Realy); } // сбрасываем тип события после завершения дескриптора buttonEvent = TOUCH_EVENT_MOVE; } } } Я обнаружил, что код, тип и значение события на мультисенсорном экране различаются. Чтобы перехватить такие события, я использовал команду getevent:
/dev/input/event0: EV_KEY BTN_TOUCH UP /dev/input/event0: EV_MSC MSC_TIMESTAMP 00032c80 /dev/input/event0: EV_SYN SYN_REPORT 00000000 /dev/input/event0: EV_ABS ABS_MT_TRACKING_ID 0000004d /dev/input/event0: EV_ABS ABS_MT_POSITION_X 00003dad /dev/input/event0: EV_ABS ABS_MT_POSITION_Y 000012bc /dev/input/event0: EV_KEY BTN_TOUCH DOWN /dev/input/event0: EV_ABS ABS_X 00003dad /dev/input/event0: EV_ABS ABS_Y 000012bc /dev/input/event0: EV_MSC MSC_TIMESTAMP 00034bc0 /dev/input/event0: EV_SYN SYN_REPORT 00000000 /dev/input/event0: EV_MSC MSC_TIMESTAMP 00036b00 когда code=EV_ABS,type=ABS_MT_POSITION_X, значение равно 00003dad (шестнадцатеричное), равное 15789 (декабрь), что намного больше, чем 1920 (мой сенсорный экран 10 дюймов, 16:9 и 1080p), I я в замешательстве, как мне получить точные координаты (включая x и y)? Я думаю, что единицей измерения является пиксель, хотя кажется, что нет, кто-нибудь может мне помочь?
Я искал в ChatGPT/Google бард, но получил неправильные ответы.
Я работаю над обработкой события ввода с помощью своей собственной программы на Android без Eventthub&InputReader, и код работал на экране с одним касанием, но не может работать на экране с несколькими касаниями, ниже приведены мои коды (частично):
р>
int readSize = read(mInputTouchfd, mEventData, EVS_READ_EVENT_MAX_NUM * sizeof(struct input_event)); если (readSize >= (int)sizeof(struct input_event)) { int eventNum = readSize/sizeof(struct input_event); LOG1("HandleTouchEvent прочитал событие ввода %d", eventNum); for (int я = 0; я dispatchTouchEvent(buttonEvent, Realx, Realy); } // сбрасываем тип события после завершения дескриптора buttonEvent = TOUCH_EVENT_MOVE; } } } Я обнаружил, что код, тип и значение события на мультисенсорном экране различаются. Чтобы перехватить такие события, я использовал команду getevent:
/dev/input/event0: EV_KEY BTN_TOUCH UP /dev/input/event0: EV_MSC MSC_TIMESTAMP 00032c80 /dev/input/event0: EV_SYN SYN_REPORT 00000000 /dev/input/event0: EV_ABS ABS_MT_TRACKING_ID 0000004d /dev/input/event0: EV_ABS ABS_MT_POSITION_X 00003dad /dev/input/event0: EV_ABS ABS_MT_POSITION_Y 000012bc /dev/input/event0: EV_KEY BTN_TOUCH DOWN /dev/input/event0: EV_ABS ABS_X 00003dad /dev/input/event0: EV_ABS ABS_Y 000012bc /dev/input/event0: EV_MSC MSC_TIMESTAMP 00034bc0 /dev/input/event0: EV_SYN SYN_REPORT 00000000 /dev/input/event0: EV_MSC MSC_TIMESTAMP 00036b00 когда code=EV_ABS,type=ABS_MT_POSITION_X, значение равно 00003dad (шестнадцатеричное), равное 15789 (декабрь), что намного больше, чем 1920 (мой сенсорный экран 10 дюймов, 16:9 и 1080p), I я в замешательстве, как мне получить точные координаты (включая x и y)? Я думаю, что единицей измерения является пиксель, хотя кажется, что нет, кто-нибудь может мне помочь?
Я искал в ChatGPT/Google бард, но получил неправильные ответы.
Мобильная версия