2012-10-16 64 views
2

我發現這篇文章:http://android-developers.blogspot.ca/2010/06/making-sense-of-multitouch.html這有助於我的理解,但我仍然不知道該怎麼做我想要做的事。瞭解Android上的多點觸控?

在我的比賽,我有一個虛擬搖桿和一些按鈕。只有2個手指會一次註冊。這就是我要的。一個用於模擬棒,另一個用於按鈕。

我不確定的主要原因是,我把一個手指放在模擬棒上並移動它,然後將手指放在按鈕上,然後釋放按鈕,模擬棒應該繼續移動到我的第一根手指。

反之亦然,如果按鈕,然後再觸摸搖桿,如果我放手模擬的粘按鈕應該還是可以下推。

在Android上觸摸指針是否以這種方式工作,就像在我放下手指時一樣,無論我放下或放下其他手指,它都會按順序記住我的第一根手指,並將它放下,移動向上移動事件?

感謝

理想我希望我有這樣的功能:

void onTouch(int fingerID, int action, int x, int y) 
{ 

} 

凡獲放下每個手指將接收下來,當手指上升移動和事件的方式。

遊戲是一個賽車遊戲,使他們需要能夠駕馭,並在同一時間推氣體。

我的問題是類似這樣的 identified multi touch pointer in action_move

編輯:

我有這樣的代碼:

private void onTouch(int finger, int action, float x, float y) 
    { 
     if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) 
     { 
      createInput(finger, x, y); 
     } 
     else if(action == MotionEvent.ACTION_MOVE) 
     { 
      inputMove(finger, x, y); 
     } 
     else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) 
     { 
      destroyInput(finger, x, y); 
     } 
    } 

    public void onTouch(MotionEvent ev) 
    { 
     final int pointerCount = ev.getPointerCount(); 
     for (int p = 0; p < pointerCount; p++) { 
      onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p)); 
     } 
    } 

但它僅適用於第一個。

+0

我可能是錯的,如果你訂閱MotionEvents,我覺得PointerId可以在MotionEvent每個點進行檢索。在這種情況下,如果您瀏覽MotionEvent中的批處理索引,則應該能夠確定哪些索引適用於哪些索引。所以只要你正確地爲每個指針事件賦予移動,它應該沒問題。 –

回答

1

所以從右側的MotionEvent類給出的例子:

public boolean onTouch(MotionEvent ev) { 
    final int pointerCount = ev.getPointerCount(); 
    for (int p = 0; p < pointerCount; p++) { 
     onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p)); 
    } 
    return true; 
} 
+0

請參閱我的編輯,這是行不通的。 – jmasterx

+0

NVM,讓它工作。 – jmasterx

0

你可以看看捏在AChartEngine處理變焦的方式。見this代碼,開始於行80它可能看起來複雜的開頭,但它可以幫助你處理更多的用例。