2011-07-17 37 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。