Getevent和指针位置

时间:2014-06-05 14:13:52

标签: android touch adb

我试图通过开发者选项中的指针位置选项获取触摸的(x,y)坐标,我使用这些坐标使用sendevent点击屏幕。这是我执行sendevent的脚本。

tap.sh sendevent /dev/input/event0 3 57 2421 sendevent /dev/input/event0 3 58 232 sendevent /dev/input/event0 3 53 $1 sendevent /dev/input/event0 3 54 $2 sendevent /dev/input/event0 0 0 0 sendevent /dev/input/event0 3 57 4294967295 sendevent /dev/input/event0 0 0 0

我从adb shell sh tap.sh <x> <y>调用脚本,但它没有点击正确的坐标。相反,它是在另一个位置点击。

当我点击屏幕并检查getevent adb shell getevent中的结果时。我发现指针位置和getevent上显示的坐标是不同的。

为什么它们不同,我该如何解决这个问题呢?

PS:我试过的设备是Nexus 7,Nexus 10。

3 个答案:

答案 0 :(得分:4)

getevent获得的X和Y坐标以及从开发人员选项中的指针位置获得的坐标是不一样的。它们使用公式进行映射。

displayX = (x - minX) * displayWidth / (maxX - minX + 1)
displayY = (y - minY) * displayHeight / (maxY - minY + 1)

来源:Touch Devices

答案 1 :(得分:2)

启用开发人员选项并启用Pointer Location,当您点按屏幕时,您可以在屏幕顶部看到x和y坐标,使用这些坐标发送点击事件。

答案 2 :(得分:0)

您是否意识到getevent(根据我的经验,这可能因设备而异)显示基数为16的值?

(旁注:getevent -l通常更容易阅读,因为它打印了事件类型的字符串表示)

即。如果getevent -l

/dev/input/event1: EV_ABS       ABS_MT_POSITION_X    000001cb       
/dev/input/event1: EV_ABS       ABS_MT_POSITION_Y    00000376

触摸的位置实际为(459, 886)

然而,如果您的代码完全正常工作,似乎sendevent不会要求使用十六进制值,因为您(例如)5354工作我会使用的地方 00350036

编辑:

在Nexus 5上尝试了原始代码(替换了正确的设备文件)后,我发现没有生成触摸事件(也没有生成十六进制等效项,实验严谨),也没有重用捕获的值(和已转换)来自getevent。以前,我有更好的经验,使用基于C one here的Python脚本转换事件,并将输出直接写入设备文件。

编辑2:

这个问题here表明初始代码应该有用。