开发者社区 问答 正文

Adb Shell getevent方法在Nexus 4上返回X和Y值的两倍

我目前正在尝试通过sendeventadb shell命令生成复杂的手势。为了重播手势,我通过geteventadb方法记录了事件。这是Nexus 4屏幕右下角的一个简单点击示例。

/dev/input/event2: 0003 0039 00000059
/dev/input/event2: 0003 0035 000005ff
/dev/input/event2: 0003 0036 000008e6
/dev/input/event2: 0003 003a 0000002d
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0039 ffffffff
/dev/input/event2: 0000 0000 00000000

转换为十进制值(对于该sendevent方法),它使得:

/dev/input/event2: 3 57 89
/dev/input/event2: 3 53 1535
/dev/input/event2: 3 54 2278
/dev/input/event2: 3 58 45
/dev/input/event2: 0 0 0
/dev/input/event2: 3 57 -1
/dev/input/event2: 0 0 0

如您所见,X的值(即第2行上的53代码)为1535,Y的值(第3行上的代码54)为2278。

我的Nexus 4屏幕尺寸只有768 * 1280,这怎么可能?与实际大小相比,它似乎要乘以2。。。如果我在Nexus 5上做同样的事情,就不会发生这种情况。

感谢您对此的帮助,这让我发疯了!^^

展开
收起
Puppet 2019-12-04 09:46:57 509 分享 版权
阿里云 AI 助理回答

看起来您在尝试通过ADB命令模拟屏幕触摸事件时遇到了坐标值与实际屏幕分辨率不匹配的问题。对于Nexus 4的屏幕尺寸(768 * 1280),您观察到的X和Y坐标值确实超出了预期范围,这通常意味着坐标系统可能采用了不同的缩放或映射方式。

在Android设备上,触摸屏输入的坐标可能使用了不同的坐标空间,常见的有以下几种情况:

  1. 原始硬件坐标:某些设备或驱动程序可能会记录触摸事件的原始硬件坐标,这些坐标可能未经过DPI(每英寸点数)调整,因此会比物理像素大。如果您的设备支持多种密度或分辨率模式,这种差异就可能出现。

  2. 密度独立像素(DIP):Android系统广泛使用DIP作为其基本单位,目的是为了实现不同屏幕密度上的统一视觉体验。1 DIP等于中等密度屏幕(MDPI)上的一个物理像素,而高密度屏幕(如Nexus 4是XHDPI)上的1 DIP则对应多个物理像素。系统可能将触摸事件转换为DIP坐标,导致您看到的数值与物理像素不一致。

  3. 屏幕比例或缩放因子:部分设备或软件层可能对输入事件应用了额外的比例或缩放,尤其是在涉及到屏幕镜像、模拟器或特殊显示设置的情况下。

针对您的问题,您可以尝试以下解决方法:

  • 校正坐标:首先确认是否需要将获取到的坐标除以某个特定因子(比如2),以便它们能正确映射到屏幕的实际像素上。根据您的描述,乘以2的情况可能是由于某种双倍坐标系的存在。

  • 查询设备配置:使用adb shell命令查询设备的显示配置信息,例如adb shell dumpsys window displays,查看是否存在非标准的密度或坐标比例设置。

  • 查阅官方文档或社区:查找特定于Nexus 4或相关Android版本的文档,了解是否有已知的触摸坐标处理差异。

  • 测试其他工具或库:考虑使用如input swipe命令或者第三方自动化测试工具(如UiAutomator、Appium等),这些工具可能已经处理了不同设备间的坐标差异问题。

如果您的目标是跨设备生成稳定的手势重播脚本,理解并适配不同设备的坐标系统差异是非常关键的。希望上述建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答