标签:
(1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事件进行拦截。这个时候我们就需要明白android touch 事件传递机制,
(2)以前很多时候比较模糊,也许是网上看到也有很多事件传递的相关文章,但我看着头晕,解释不彻底,有的说得一半,总算不满足不满意,于是据我自己的理解来彻底的来整理下具体的是怎么个传递方式,分享给大家,希望大家看到有什么不对的地方及时提出纠正。谢谢?
这是本次理解android touch 事件传递机制的布局文件
?
(1)android touch 事件传递机制示意图,由于网页原因会被拉伸,请大家单独将该图在另一个窗口打开查看。
(2)事件是从Activity触发事件然后传递到布局文件,一层一层的往子容器传递到最底层的view,如果每层布局文件未对该事件进行处理或者消费那么该事件会从最底层开始往上传到Activity进行消费。
(3)那么事件的发起是由Activity界面的touch事件发起传递到布局视图,但是该视图只是描述了布局文件或者view的相关事件传递机制,Activity事件没有进行描述,但是在下面测试中会涉及Activity相关事件传递来解释心中些许疑惑
一、每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
(1)public boolean dispatchTouchEvent(MotionEvent ev) ?分发TouchEvent
(2)public boolean onInterceptTouchEvent(MotionEvent ev) 拦截TouchEvent
(3)public boolean onTouchEvent(MotionEvent ev) 处理TouchEvent
二、?android touch 事件传递机制示意图可以总结如下规律
(1)一个事件由用户点击触发开始顺着箭头的方向进行传递,直到任意一个结束点结束事件传递。
(2)那么事件传递可以由A传到B,B可以不传到C,B不进行分发,那么就从B再传回A进行消费然后结束,也可以由B传到C然后传递D,或者不传到D进行消费或者传到父容器进行消费。
(3)忘掉以前的各种
?
?
?
?
?
?
标签:
原文地址:http://www.cnblogs.com/yishujun/p/5578947.html