我在 android 上使用触摸屏 (atmel maxtouch - atmel 1664s),发现越往右(X 变大),我的手指与屏幕上的触摸点之间的距离就越大。这是 IDC 文件、驱动程序或其他地方的设置问题吗?在同一屏幕上使用其他操作系统(如 Ubuntu)似乎没有此问题。
我用过这个IDC文件以尝试更正位置,但最后一行只是将触摸屏变成了触控板。
touch.deviceType = touchScreen
touch.orientationAware = 1
output.x = (raw.x - raw.x.min) * (output.width / raw.width)
最佳答案
内核驱动程序未正确检测和报告输入 X 报告的可能范围。
如果你使用 adb shell
并运行 getevent -il
你应该得到类似的东西
add device 6: /dev/input/event2
bus: 0000
vendor 0000
product 0000
version 0000
name: "touch_dev"
location: ""
id: ""
version: 1.0.1
events:
ABS (0003): ABS_MT_SLOT : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
ABS_MT_TOUCH_MAJOR : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
ABS_MT_POSITION_X : value 0, min 0, max 1535, fuzz 0, flat 0, resolution 0
ABS_MT_POSITION_Y : value 0, min 0, max 2559, fuzz 0, flat 0, resolution 0
ABS_MT_TRACKING_ID : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
ABS_MT_PRESSURE : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
input props:
INPUT_PROP_DIRECT
你可以在我的设备上看到,X 值可以在 0 到 1535 之间。
如果您随后运行 getevent -trl/dev/input/event2
,在屏幕上移动您的手指,并查看最大可能的 X 值,它应该对应于:
[ 115960.226411] EV_ABS ABS_MT_POSITION_X 000005ee
0x5ee = 1518,所以这是正确的。
触摸 Controller 上有一些参数可以调整缩放比例,需要与内核驱动程序报告的内容同步。标准的 Linux 主线驱动程序不能很好地处理那些与平台数据不同步的参数。有解决此问题的补丁尚未上游:https://github.com/atmel-maxtouch/linux/commit/002438d207
如果当您将手指移到最右边时,触摸仍在屏幕上,您可能可以通过执行以下操作来纠正它
output.x = raw.x / scale
其中比例是报告坐标与所需坐标的比率。你不能反过来做,因为较低的输入层会丢弃屏幕外的报告。
正确的解决方法是修复内核驱动程序中的错误,或调整触摸 Controller 上的范围设置。
您没有说明它是什么特定设备,因此很难提供进一步的帮助。
关于Android 触摸屏位置关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564830/