Android触摸事件从父级调度到子级

时间:2016-05-17 07:24:33

标签: android android-view android-viewgroup android-touch-event

我有一个父Viewgroup,里面有一个子View。我注意到触摸事件期间的某些行为与我调度触摸事件的心理模型不同。

Viewgroup A占据整个屏幕,View B以编程方式添加到A(使用A.addView(B))并仅占用屏幕的一部分。对于A和B我都重写了onTouchEvent(MotionEvent事件)方法,但没有别的。

如果我用手指触摸屏幕并将其提升到视图B的范围内,我会注意到触摸事件直接路由到B的onTouchEvent()方法,而没有遇到A的onTouchEvent()方法。 B接收DOWN,MOVE和UP动作,并为每个动作返回true。

如果我然后将手指触摸到屏幕并在视图组A的范围内提升但在视图B的范围之外,那么我会看到违反我的心智模型的行为,这些模型是如何调度触摸事件的。当我这样做时,即使没有点击B,View B也会在其onTouchEvent()中再次收到DOWN,MOVE和UP动作。我本以期待A接受这些行动。如果我用手指完成相同的动作(触摸并抬起A内部但在B外),则A的onTouchEvent()按预期接收DOWN,MOVE和UP动作。

几乎就像其中一个视图收到触摸事件后,系统会设置它以接收下一次触摸,而不管触摸位置如何。

我有什么基本的东西我不明白吗?

另外,我的一个资源提到我需要在我的Viewgroup / Views中手动管理命中测试,以确定视图组在收到命中时是否应该将命中发送给孩子。这对我来说是有道理的,然而,在我提到的第一个案例中,似乎系统已经为我做了这个,因为命中会自动发送给孩子。哪种方法是正确的,让系统自己处理或处理命中逻辑?

我使用这些资源来帮助我,但他们似乎没有明确地涵盖这一点:

http://codetheory.in/understanding-android-input-touch-events/   https://guides.codepath.com/android/Gestures-and-Touch-Events

0 个答案:

没有答案