2014-05-07 207 views
1

當我從arduino(通過藍牙)收到特定的字符串時,我想要做的是在我的活動的特定區域觸發ontouch事件。我試圖用wii和arduino構建一個控制器,以用於我正在寫自己的遊戲中。你已經知道有一個函數* openButton.performClick();爲此,但在遊戲中,我並不總是使用按鈕,所以它不好。以編程方式觸發ontouch事件

我想模擬觸摸像adb那樣用猴子,但沒有root權限 像注入觸摸只是沒有根。

這部分代碼:

int[] loc = new int[2]; 
    openButton.getLocationOnScreen(loc);// get the region where to simulate the //touch event 
    xTest = (float)loc[0]; 
    yTest = (float)loc[1]; 



@SuppressLint("Recycle") void testing(){ 
    long downTime = SystemClock.uptimeMillis(); 
    long eventTime = SystemClock.uptimeMillis() + 100; 
    float x = xTest; 
    float y = yTest; 


    int metaState = 0; 
    MotionEvent motionEvent = MotionEvent.obtain(
     downTime, 
     eventTime, 
     MotionEvent.ACTION_UP, 
     x, 
     y, 
     metaState 
    ); 
    dispatchTouchEvent(motionEvent); 


} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    int action = event.getAction(); 
     switch (action & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_UP: 
       // do something 
       openButton.performClick(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       // do something 
       // how to trigger a ACTION_DOWN event here? 
       break; 
    } 

    return false; 
} 

所以德恩我得到一個特定的字符串我想在屏幕上的特定區域編程模擬toucht事件,這一次它的一個按鈕,但它可能是別的什麼這就是爲什麼「view.performclick()」不好。 我已經看到了一些例子,其中dispatchTouchEvent才放認爲,如果我這樣做我得到一個錯誤 感謝您在您的幫助

回答

1

如果您使用的是onTouchListener的onTouch(...)方法是公開的,所以我想你可以稱它。

所以當你實例化onTouchListener存儲它作爲一個變量。

OnTouchListener listener = new OnTouchListener() { [[override code etc.]] } 

然後,只需調用您重寫的onTouch方法,併爲其指定想要模擬觸摸的視圖和事件。

MotionEvent沒有一個承包商,但有一個叫做獲得一個工廠方法():

MotionEvent myEvent = MotionEvent.obtain(long downTime, long eventTime, int action, float x, float y, int metaState); 

然後,只需將它傳遞給你的onTouch:

onTouch(myView, myEvent); 

假設您已經通過了正確的值給你的事件,它不會知道區別。

欲瞭解更多的MotionEvent,什麼參數的含義,請訪問:

http://developer.android.com/reference/android/view/MotionEvent.html

謝謝!

相關問題