Android从触碰屏幕开始的变乱收罗,剖析及分发

源码 2024-9-4 10:25:11 94 0 来自 中国
1 原始变乱信息


打开模拟器, 大概用usb把手机毗连上电脑并打开手机上面的开辟者模式, (这里为了截图方便用了模拟器)打开cmd, 输入adb shell getevent回车, 然后点击模拟器大概手机后, 就会看到有N多行的/dev/input/event......输出. 实在, 这些信息就是最原始的变乱信息.


1.png 2 信息分析


cmd重新实行adb shell getevent -t -l, 再次点击手机的某个app, 表现出的信息是如许的:
是手机或模拟器开机后到下令实行时的时间隔断, 背面表现的是详细下令, 此中, /dev/input/event1表现的是屏幕的输入变乱,  第一个ABS_MT_TRACKING_ID 表现收罗信息开始, 后一个ABS_MT_TRACKING_ID表现收罗信息竣事,  ABS_MT_PRESSURE表现的是屏幕感受到的压力值, SYN_REPORT 表现的是同步数据, 最紧张的是ABS_MT_POSITION_X和ABS_MT_POSITION_Y, 毫无疑问, 这个就是表现屏幕感受到的触碰坐标位置. 最右边的一列是16进制的值.
其他的信息我们可以先忽略, 最紧张的是要记录时间和坐标点, 接下来就是把收罗到的坐标点转换成10进制的坐标点, x坐标收罗到的值是00005487,转换10进制是21639, 同理, y坐标转换前是00006b5b, 转换后是27483,  接下来须要根据公式来获取到真正的应用层能辨认的坐标系, 详细公式为:


3.png 手机像素我们可以通过代码获取当前手机的像素, 但是xmin和xmax, 以及ymin和ymax是什么呢?我们还是通过cmd用adb shell getevent -p下令来获取. 实行下令后,拉到最下方, 看到如下图示:


4.png 我们找到0035和0036的行, 即
   0035  : value 0, min 0, max 1727, fuzz 0, flat 0, resolution 0
   0036  : value 0, min 0, max 1887, fuzz 0, flat 0, resolution 0
0035地点的行就是x信息, 0036地点的行就是y信息, 每行的min值和max值对应上面公式的min和max, 以是我这里终极转换成的x, y坐标效果如下: (我的模拟器颠末代码获取的宽高分辨率分别是1728, 1888)
x = (19b - 0) * 1728 /(1727-0) = 411 * 1728 / 1727 = 
y = (405 - 0) * 1888 / (1887-0) = 405
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 18:24, Processed in 0.174363 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表