2012-08-16 82 views
3

觸摸屏我需要實現觸摸屏的那種死區的在我的APK使活動不接收來自這些區域的任何觸摸事件。 只要多點觸摸事件鏈接到第一次觸摸,似乎並不重要。實施盲區中的Android

假設我有兩個並排的側視圖的佈局,並希望忽略右視圖所有的觸摸動作(「死」的觀點是碰不得)。

對於單次觸摸是微不足道。

但對於多點觸摸第一觸摸決定一切:如果第一個是在「死」的看法我還沒有任何活動都

  1. 如果第一個在「生命」視圖中,第二個在「死」視圖中,則會收到多點觸控事件ACTION_POINTER_DOWN_2。

目前我必須接收原始流中的所有事件並根據我的「死區」規則將其轉換爲另一個事件流。

但問題是:我們有什麼樣的有用的API的限制觸摸屏事件處理,我們只需要地方?

P.S.我需要所有這些以在玩遊戲時過濾屏幕邊上的意外觸摸。

謝謝。

回答

1

如果你想要兩個佈局,一個活的和一個死一個,你應該添加自己View.OnTouchListener他們每個人。

我做了一個例子,這裏是活動:

public class MainActivity extends ActionBarActivity { 
TextView text; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    LinearLayout linearLayoutDead = (LinearLayout) findViewById(R.id.dead); 
    linearLayoutDead.setOnTouchListener(onTouchDeadListener); 
    LinearLayout linearLayoutLive = (LinearLayout) findViewById(R.id.live); 
    linearLayoutLive.setOnTouchListener(onTouchLiveListener); 

    text = (TextView) findViewById(R.id.textView); 
} 

private View.OnTouchListener onTouchDeadListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     text.setText(motionEvent.toString()); 
     return false; 
    } 

}; 

private View.OnTouchListener onTouchLiveListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     text.setText(motionEvent.toString()); 
     return true; 
    } 

}; 

}

而且佈局:

<?xml version="1.0" encoding="utf-8"?> 

我們覆蓋OnTouch方法,你會發現,當我們在「死區」單個或多個觸摸,我們得到的初步反應,但沒有進一步。 但是,當我們在「活區」中進行第一次觸摸並且在死區中進行第二次觸摸時,情況如何?

對於這種情況,你應該添加一個新的條件,您OnTouch方法,像這樣:

private View.OnTouchListener onTouchLiveListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     if(motionEvent.getPointerCount()>1){ 
      if(motionEvent.getY(1) > someNumber){ 
       //Case when we touch the dead zone, TODO do some ... 
      } 
     } 
     text.setText(motionEvent.toString()); 
     return true; 
    } 

}; 

因此,在這種特殊情況下,我們可以檢查當觸摸「活區」下發生,根本不理會它或實現我們想要的任何行爲。

希望這可能會有所幫助。 關注 何塞

+0

對不起這是我早期的Android嘗試。我不再與這個項目有關(實際上近兩年)。我記得我實施了一種相同的解決方案。我的觸摸屏處理過濾掉了區域內的水龍頭,並移除了額外的座標。在成功的過程中,我成功地過濾了他們想要的東西,但項目本身早已完成。 – OGP 2015-02-24 13:42:25