2013-03-20 47 views
0

我試圖創建視圖,其中所有其他人將在3個手指被觸摸時執行動作。這些活動都有自己的觸摸和滑動。在每個活動上創建一個線性視圖來執行動作

我已經通過創建一個擴展linearlayout和攔截觸摸的類來實現這種工作。並在xml中添加。

但是,只有當按鈕或視圖這樣的項目是可點擊或可觸摸的表面並且不會成爲可觸摸的表面本身時纔會調用此功能。

public class MyCatcher extends LinearLayout { 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    int action = event.getAction(); 
    switch (action & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     // multitouch!! - touch down 
     int count = event.getPointerCount(); // Number of 'fingers' in this 
     if (count > 3) { 
       doThis(mContext); 
     } 
    } 
    return super.onInterceptTouchEvent(event); 
} 

以XML

<packagename.MyCatcher 
....> 
     my normal layout 
</packagename.MyCatcher> 

所以,當是可觸摸的物品被觸摸此代碼工作,但不會成爲自己的觸摸層。

我已經嘗試setontouchlister在構造函數中沒有運氣。

感謝所有幫助

EXTRA:當通過onAttach設置touchlistener我可以讓它趕上接觸,但我不能像正常使用event.getPointerCount()作爲它的返回1. 我擔心這可能會佔用大量的處理?/

+0

當您點擊視圖時,onInterceptTouchEvent是否甚至不會調用一次? – 2013-03-20 15:01:20

+0

不僅如果我點擊一個可觸摸的視圖。像一個按鈕。 – RuAware 2013-03-20 15:05:04

+0

我曾經實現過類似的方法是讓onInterceptTouchEvent返回true。 視圖然後將處理其onTouch事件,並且當視圖不需要觸摸事件時,它將在其子項上調用dispatchTouchEvent(MotionEvent)。 – 2013-03-20 15:12:41

回答

0
onintercepttouchevent() 

只調用每當觸摸事件發生。即;觸摸事件只有當按鈕,文本框等具有onclicklistener啓用的查看項目被按下時纔會發生。對於你的問題,你需要爲整個視圖設置onclicklistener。

+0

我試圖設置linearlayout.setonclicklistener(新的.......但這並沒有幫助,它仍然只是從其他視圖intercept接觸 – RuAware 2013-03-20 15:46:43

0

而不是佈局,創建一個普通的視圖,並將其添加到您現有的佈局,以便它跨越整個屏幕,並在所有其他視圖之上(按z順序)。現在它應該在所有其他視圖之前獲得所有觸摸事件。您的onTouch ...實現應確保將所有觸摸事件傳遞給其他視圖(除非您希望例如按鈕在某些情況下不工作,那麼不要傳遞事件)。

+0

這不允許我數到手指,我總是隻得到1? – RuAware 2013-03-20 15:46:07

+0

嗯......這很奇怪...... – Ridcully 2013-03-20 17:01:26

+0

除非你知道一個方法嗎? – RuAware 2013-03-20 17:24:56

相關問題