Injection of touch events using screen driver

旧时模样 提交于 2019-11-27 22:46:49

问题


Using android-event-injector library, I wrote an application to inject a touch event when some event is triggered. The problem is that i need to inject touch at absolute coordinates of a given View, so I do the following to get the location on screen:

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

This gives me the absolute coordinates on screen. The problem is that touch injection doesn't work.

I can inject correctly touches in screen driver, but for some reason the coordinates are misunderstood and touches are injected elsewhere. Here are some examples (my screen is 1024x600 landscape oriented):

  • Coords (0,0) -> Injected in (0,0)
  • Coords (0,600) -> Injected in (0,351)
  • Coords (1024,0) -> Not injected (most likely x is out of range)
  • Coords (1024,600) -> Not injected (most likely x is out of range)
  • Coords (640,480) -> Not injected (most likely x is out of range)
  • Coords (512,300) -> Injected in (872,175)
  • Coords (100,100) -> Injected in (170,58)

回答1:


Based on the sample values it appears that the

  1. Touchscreen is (600, 1024),
  2. Mapped to a (1024,600) display.

To generate a touch event at (X,Y)display co-ordinates, the (x,y)touch co-ordinates that need to be injected can be calculated as follows

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


来源:https://stackoverflow.com/questions/17972892/injection-of-touch-events-using-screen-driver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!