2011-07-17 35 views
1

我有一個類延伸ViewGroup,並希望從它得到每個MotionEvent。到目前爲止,我有這樣的:追蹤ViewGroup中的MotionEvent

class TestViewGroup extends ViewGroup { 
    public TestViewGroup(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.d("TestViewGroup", "X: " + (int)event.getX() + " Y: " + (int)event.getY()); 
     return true; 
    } 
} 

onTouchEvent(MotionEvent event)方法能夠捕捉MotionEvent每次我把我的手指在屏幕上的時間。但是如果我在手指仍然下垂的時候將手指放在屏幕上,它將不會繼續跟蹤我手指的座標。我知道在延伸View的課堂中,可以在手指在View中移動時跟蹤手指。我只是想知道如何將相同的想法應用於ViewGroup

回答

0

我實現了一個非常簡單的ViewGroup類,並複製你的代碼中,的onTouchEvent工作得很好

我做了不同的唯一的事情就是實現所有的構造函數,雖然一般我也叫超級爲onTochEvent類這似乎沒有什麼區別。

所以我想知道是否有任何code/xml你離開可能會有所作爲?

捕獲模擬器和設備中的所有觸摸事件,幾乎與您的構造函數例外類似。

public class customViewGroup extends ViewGroup { 

    public customViewGroup(Context context) { 
     super(context,null,0); 
    } 

    public customViewGroup(Context context, AttributeSet attrs) { 
     super(context, attrs,0); 

    } 

    public customViewGroup(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.d("bThere", "X: " + (int)event.getX() + " Y: " + (int)event.getY()); 
     return true;//super.onTouchEvent(event); 
    } 

} 
+0

你知道,你是對的,它與View或ViewGroup無關,它實際上與我認爲如何整合它有關。我試圖將ViewGroup放入系統的WindowManager中,以便它可以在系統覆蓋層上保持不變(基本上顯示一個視圖,而不管頂部有什麼活動)。你知道是否將視圖添加到WindowManager會影響觸摸事件如何傳遞給它? – Brian

+0

@AeroDroid ...聽起來像是一件有趣的事情,我會建議打開另一個問題並重新措詞,還要添加一些代碼。您可能還會嘗試使用@Override public boolean dispatchTouchEvent(MotionEvent event){}作爲替代方法,因爲它在獲取事件時似乎更健壯一些,但您需要添加一些代碼 – Idistic

+0

其實剛纔我剛剛提出了一個新問題,這裏請看看它[這裏](http://stackoverflow.com/questions/6725636/getting-all-motionevents-with-windowmanager-layoutparams-flag-watch-outside-touch)。 – Brian

-1

你應該添加viewGroup.setClickable(true);,以確保視圖可以得到更多的TouchEvent。