【问题标题】:Injection of touch events using screen driver使用屏幕驱动程序注入触摸事件
【发布时间】:2015-05-29 17:09:09
【问题描述】:

使用android-event-injector 库,我编写了一个应用程序来在某个事件被触发时注入一个触摸事件。问题是我需要在给定View 的绝对坐标处注入触摸,所以我执行以下操作来获取屏幕上的位置:

View v = /* find view*/;
int [] coords = new int[2];
v.getLocationOnScreen(coords);

这给了我屏幕上的绝对坐标。问题是触摸注入不起作用。

我可以在屏幕驱动程序中正确注入触摸,但由于某种原因坐标被误解并且触摸被注入到其他地方。 以下是一些示例(我的屏幕是 1024x600 横向):

  • 坐标 (0,0) -> 注入 (0,0)
  • 坐标 (0,600) -> 注入 (0,351)
  • 坐标 (1024,0) -> 未注入(很可能 x 超出范围)
  • 坐标 (1024,600) -> 未注入(很可能 x 超出范围)
  • 坐标 (640,480) -> 未注入(很可能 x 超出范围)
  • 坐标 (512,300) -> 注入 (872,175)
  • 坐标 (100,100) -> 注入 (170,58)

【问题讨论】:

  • 当您尝试将触摸事件注入屏幕驱动程序时,可能您忽略了屏幕校准(幅度和/或轴),这导致您的触摸事件被理解,但在错误的屏幕上坐标。在 Android 设置中的开发人员选项中启用指针 x、y 坐标的显示,并使用在驱动程序中注入的几对值和在屏幕上检测到的值(理想情况下在显示器四个角的任何位置)更新您的问题。
  • @TheCodeArtist 我尝试并添加了一些示例。

标签: java android linux-device-driver


【解决方案1】:

根据样本值,

  1. 触摸屏为 (600, 1024),
  2. 映射到 (1024,600) 显示。

要在(X,Y)显示坐标产生触摸事件,需要注入的(x,y)触摸坐标可以计算如下

x(touch) = (600/1024) * X(disp)
y(touch) = (1024/600) * Y(disp)

【讨论】:

  • 有没有办法获得显示尺寸 (2.) ?我的意思是您可以通过使用 DisplayMetrics 获得触摸屏 (1.),但如何以编程方式获得显示器?
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多