【问题标题】:How to interpret getevent touch coordinates as actual touch coordinates [duplicate]如何将getevent触摸坐标解释为实际触摸坐标[重复]
【发布时间】:2020-09-21 10:23:54
【问题描述】:

取自source file itself

#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 = 3974f9d = 3997。并且屏幕的实际大小约为(1057,2366)(大约)。

所以我想也许它只是使用比例,而不是实际值。所以基本上如果我们这样做(由 getevent 给出的坐标/getevent 的最大坐标大小)*(实际坐标大小),我们可能会得到正确的值。

我确实做到了,并且得到了正确的值。 (2905/3974)*1057 = 692(3692/3997)*2366 = 2185,两者都接近实际值。

所以现在问题变成了,画布大小是否总是等于(4000,4000)?

【问题讨论】:

    标签: android adb touch


    【解决方案1】:

    为了将getevent提供的X,Y坐标转化为input tap x y,我们需要做以下事情:

    1. 通过getevent -il /dev/input/event2 | grep ABS_MT_POSITION 找出getevent 的最大X、Y。那就是 (4000,4000)
    2. 通过adb shell wm size 找出实际屏幕尺寸这给了我 (1080,2400)
    3. 现在将getevent(x,y)转换成(x*1080/4000,y*2400/4000)得到实际结果,可以和input tap x y一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多