2013-07-31 77 views
2

使用android-event-injector庫,我編寫了一個應用程序,以便在觸發某個事件時注入觸摸事件。問題是,我需要在給定View的絕對座標注入觸摸的,所以我下面在屏幕上獲得位置:使用屏幕驅動程序注入觸摸事件

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

這給了我絕對座標在屏幕上。問題是觸摸注入不起作用。

我可以在屏幕驅動程序中正確注入觸摸,但由於某些原因,座標被誤解,觸及注入其他地方。 以下是一些例子(我的屏幕1024x600的景觀導向):

  • 座標(0,0) - >注入(0,0)
  • COORDS(0600) - >注入(0351)
  • COORDS(1024,0) - >不注射(最有可能的x是超出範圍)
  • COORDS(1024,600) - >不注射(最有可能的x是超出範圍)
  • COORDS(640480) - >未注入(最有可能的x超出範圍)
  • Coords(512,300) - > Injecte在(872175)
  • COORDS d(100,100) - >在(170,58)
+0

當將(X,Y)觸摸座標的觸摸事件嘗試將觸摸事件注入屏幕驅動程序,也許您忽略了屏幕校準(大小和/或軸),這會導致您的觸摸事件被理解,但屏幕座標錯誤。在Android設置中啓用顯示指針x和y的座標,並使用幾對值更新您的問題 - 在驅動程序中注入並在屏幕上檢測到值(理想情況下位於顯示屏的四角)。 – TheCodeArtist

+0

@TheCode藝術家我嘗試並添加了一些例子。 – Vektor88

回答

4

注射基於看來該

  1. 觸摸屏是(600,1024)的採樣值,
  2. 映射到(1024,600)顯示。

爲了產生在(X,Y)的顯示座標,需要被注入可以計算如下

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

這工作完美!謝謝! – Vektor88

+0

有沒有辦法獲得顯示尺寸(2.)?我的意思是你可以通過使用DisplayMetrics獲得觸摸屏(1.),但是如何獲得編程的顯示器? – andre