2014-01-09 116 views
22

我有一個RelativeLayout,這個佈局有近10個視圖。在不擴展的情況下處理攔截觸摸事件ViewGroup

我已將OnTouchListener設置爲此佈局,並在其中執行一些操作並返回true

這個監聽器工作正常,當我觸摸沒有視圖(平均空白區域)的佈局。如果我觸及此佈局的子視圖,則此偵聽器不會觸發...

並且從文檔中,我瞭解到我們可以通過擴展ViewGroup(so here RelativeLayout)並在子視圖消耗之前處理觸摸事件來覆蓋onInterceptTouchEvent()這個事件...

這將做一個竅門,但我需要修改許多xml文件,我需要這個功能通過用我的CustomRelativeLayout替換RelativeLayout。

所以我的問題是:

,有沒有辦法在RelativeLayout消耗事件的子視圖之前處理觸摸事件RelativeLayout(ofcourse的ViewGroup)?我不希望延長RelativeLayout ...

+0

有沒有這樣的方式:您必須擴展RelativeLayout – pskink

回答

0

試加onTouchListener從活動的RelativeLayout

RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLauout); 
    rl.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // do something 
      return false; 
     } 
    }); 

或使用方法的onTouchEvent

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // TODO Auto-generated method stub 
    return super.onTouchEvent(event); 
} 
+0

感謝您的回答...我在提問之前已嘗試了兩種方式...但它不起作用:-( – RuntimeException

+0

mayby嘗試擴展onTouchListener並設置它們在佈局 – kris14an

+0

所有視圖這可能會做的工作,但我必須在近12個活動中寫很多代碼... – RuntimeException

18

嘗試重寫

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    return super.dispatchTouchEvent(ev); 
} 

Activity。 此方法是第一個處理觸摸事件的方法。 但在這種情況下,你需要的意見

+0

你讓我的下午男人,謝謝;) – Hugo

-2

您可以在XML簡單的設置當前座標的工作:

android:clickable="true" 
+0

我試過這個爲RelativeLayout沒有成功。 – Matt

0

嘗試處理ACTION_DOWN事件時,在子視圖onTouchEvent()方法返回false。所以轉發觸摸事件不會被髮送到子視圖,也就是沒有被使用的事件。

1

雖然不一定是理想的,但對於沒有動態內容的較小布局而言,這很適用。

在xml中,將android:clickable="false"設置爲佈局中ViewGroup的所有後代(包括嵌套的ViewGroups及其子項)。每個被點擊的孩子然後將點擊傳播給它的父代,最終到達ViewGroup的默認觸摸處理程序。確保將根視圖組設置爲您要獲取點擊事件的位置android:clickable="true"viewgroup.setClickable(true)

如果動態添加視圖,請確保在將其添加到視圖層次結構之前調用view.setClickable(false);

相關問題