如何将 getevent 触摸坐标解释为实际触摸坐标
How to interpret getevent touch coordinates as actual touch coordinates
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
所以当我得到输出时:
/dev/input/event2: 0003 0039 00000cc7
/dev/input/event2: 0001 014a 00000001
/dev/input/event2: 0001 0145 00000001
/dev/input/event2: 0003 0035 00000a2d //<---- X coordinate
/dev/input/event2: 0003 0036 00000e6c //<---- Y coordinate
/dev/input/event2: 0003 0030 00000008
/dev/input/event2: 0003 0031 00000008
/dev/input/event2: 0003 003e 0001017e
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 003e 00000000
/dev/input/event2: 0003 0039 ffffffff
/dev/input/event2: 0001 014a 00000000
/dev/input/event2: 0001 0145 00000000
/dev/input/event2: 0000 0000 00000000
a2d
十进制是2605,e6c
是3692。在屏幕上的位置,实际上是(670,2141)
。如何将 getevent
坐标转换为实际可用的坐标。
另外,“中心 X 椭圆位置”和“中心 Y 椭圆位置”到底是什么意思?
感谢任何帮助。
编辑:我触摸了屏幕的右下角,getevent
输出是:
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID 00000d4f
/dev/input/event2: EV_KEY BTN_TOUCH DOWN
/dev/input/event2: EV_KEY BTN_TOOL_FINGER DOWN
/dev/input/event2: EV_ABS ABS_MT_POSITION_X 00000f86 #<---X coordinate
/dev/input/event2: EV_ABS ABS_MT_POSITION_Y 00000f9d //<---Y coordinate
/dev/input/event2: EV_ABS 003e 0001017e
/dev/input/event2: EV_SYN SYN_REPORT 00000000
/dev/input/event2: EV_ABS 003e 00000000
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID ffffffff
/dev/input/event2: EV_KEY BTN_TOUCH UP
/dev/input/event2: EV_KEY BTN_TOOL_FINGER UP
/dev/input/event2: EV_SYN SYN_REPORT 00000000
这里,f86 = 3974
和f9d = 3997
。而屏幕的实际大小在(1057,2366)
左右(大约)。
所以我想也许它只是使用比例,而不是实际值。所以基本上如果我们这样做(由 getevent 给出的坐标/getevent 的最大坐标大小)*(实际坐标大小),我们可能会得到正确的值。
而我正是这样做的,并且得到了正确的值。 (2905/3974)*1057 = 692
和(3692/3997)*2366 = 2185
,都接近实际值
那么现在的问题是,canvas 大小是否总是等于 (4000,4000)?
为了将getevent
提供的X,Y坐标转化为input tap x y
,我们需要做以下事情:
- 通过
getevent -il /dev/input/event2 | grep ABS_MT_POSITION
找出 getevent
的最大 X、Y。那给了 (4000,4000)
- 通过
adb shell wm size
找出实际屏幕尺寸这给了我(1080,2400)
- 现在将
getevent
(x,y)转换成(x*1080/4000,y*2400/4000)
得到实际结果,可以和input tap x y
. 一起使用
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
所以当我得到输出时:
/dev/input/event2: 0003 0039 00000cc7
/dev/input/event2: 0001 014a 00000001
/dev/input/event2: 0001 0145 00000001
/dev/input/event2: 0003 0035 00000a2d //<---- X coordinate
/dev/input/event2: 0003 0036 00000e6c //<---- Y coordinate
/dev/input/event2: 0003 0030 00000008
/dev/input/event2: 0003 0031 00000008
/dev/input/event2: 0003 003e 0001017e
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 003e 00000000
/dev/input/event2: 0003 0039 ffffffff
/dev/input/event2: 0001 014a 00000000
/dev/input/event2: 0001 0145 00000000
/dev/input/event2: 0000 0000 00000000
a2d
十进制是2605,e6c
是3692。在屏幕上的位置,实际上是(670,2141)
。如何将 getevent
坐标转换为实际可用的坐标。
另外,“中心 X 椭圆位置”和“中心 Y 椭圆位置”到底是什么意思?
感谢任何帮助。
编辑:我触摸了屏幕的右下角,getevent
输出是:
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID 00000d4f
/dev/input/event2: EV_KEY BTN_TOUCH DOWN
/dev/input/event2: EV_KEY BTN_TOOL_FINGER DOWN
/dev/input/event2: EV_ABS ABS_MT_POSITION_X 00000f86 #<---X coordinate
/dev/input/event2: EV_ABS ABS_MT_POSITION_Y 00000f9d //<---Y coordinate
/dev/input/event2: EV_ABS 003e 0001017e
/dev/input/event2: EV_SYN SYN_REPORT 00000000
/dev/input/event2: EV_ABS 003e 00000000
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID ffffffff
/dev/input/event2: EV_KEY BTN_TOUCH UP
/dev/input/event2: EV_KEY BTN_TOOL_FINGER UP
/dev/input/event2: EV_SYN SYN_REPORT 00000000
这里,f86 = 3974
和f9d = 3997
。而屏幕的实际大小在(1057,2366)
左右(大约)。
所以我想也许它只是使用比例,而不是实际值。所以基本上如果我们这样做(由 getevent 给出的坐标/getevent 的最大坐标大小)*(实际坐标大小),我们可能会得到正确的值。
而我正是这样做的,并且得到了正确的值。 (2905/3974)*1057 = 692
和(3692/3997)*2366 = 2185
,都接近实际值
那么现在的问题是,canvas 大小是否总是等于 (4000,4000)?
为了将getevent
提供的X,Y坐标转化为input tap x y
,我们需要做以下事情:
- 通过
getevent -il /dev/input/event2 | grep ABS_MT_POSITION
找出getevent
的最大 X、Y。那给了 (4000,4000) - 通过
adb shell wm size
找出实际屏幕尺寸这给了我(1080,2400) - 现在将
getevent
(x,y)转换成(x*1080/4000,y*2400/4000)
得到实际结果,可以和input tap x y
. 一起使用