内核驱动程序未正确检测和报告输入 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,所以差不多。
触摸控制器上有一些参数可以调整这种缩放比例,并且需要与内核驱动程序报告的内容同步。标准的 Linux 主线驱动程序不能很好地处理那些与平台数据不同步的参数。有一些补丁可以解决这个问题,但尚未发布:https://github.com/atmel-maxtouch/linux/commit/002438d207
如果当你将手指移到最右边时,触摸仍然在屏幕上,你可以通过这样做来纠正它
output.x = raw.x / scale
其中 scale 是报告坐标与所需坐标的比率。你不能反过来做,因为较低的输入层会将报告扔到屏幕之外。
适当的修复方法是修复内核驱动程序中的错误,或调整触摸控制器上的范围设置。
你没有说它是什么特定的设备,所以很难进一步提供帮助。