onTouchEvent()返回false的时候是传递给父控件的onTouchEvent()么?

Kross 发布于 2013/12/10 09:24
阅读 400
收藏 1
最近一直在看Android的事件分配(事件冒泡吧)。理解了很多,学会了很多,但我发现一个问题啊:onTouchEvent()返回true表示消费了这个事件,这个事件就不再传递下去了,返回false的时候表示没有消费这个事件,就传递给父控件(这句话是对的么~)

假设我们从外到内有三层结构的视图 ViewGroup(A) -> ViewGroup(B) -> View(C)

现在手点在C上面,首先会调用A->onInterceptTouchEvent()

1.假设A->onInterceptTouchEvent()返回false,事件便传递给B->onInterceptTouchEvent()。
2.假设B->onInterceptTouchEvent()返回false,事件便会传递给C->onTouchEvent()。
3.假设C->onTouchEvent()返回true,事件便被消费了。这是OK的
4.假如C->onTouchEvent()返回false,事件就被传递给父控件(B),那岂不是又调用了B->onInterceptTouchEvent(),这样就又回到第2步了?
加载中
0
os_j
os_j
onTouchEvent()返回true表示消费了这个事件,这个事件就不再传递下去了,返回false的时候表示没有消费这个事件,就传递给父控件(这句话是对的么~)
--------返回false,的确是表示没有消费这个事件,但是并不是说传递给父控件,而是允许自身去响应事件。(这些响应操作android底层已经写好,如滑动等)。这是我的理解
Kross
Kross
我已经搞明白这个问题了,请看我的这篇博客~O(∩_∩)O http://www.cnblogs.com/kross/p/3467285.html
0
打劫土豆
打劫土豆

传递给父控件的说法是不正确的。是父控件从子view那里得到的反馈是false,表示没有子view消费这个事件,那么父view则可以去消费这个事件;相应的如果父控件总子view得到的反馈是true的话,表示子view已经消费了这个事件,自己则不会再去响应。

还有一个重要的方法你应该去研究:dispatchTouchEvent()

事件分发全在这三个方法了。

Kross
Kross
……那请看看这篇http://www.cnblogs.com/kross/p/3467285.html 。这是我昨天理解后写的,是这样的么……
返回顶部
顶部