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)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…