Andriod Touch事件分发详解


1. 所有的Touch事件都被封装成MotionEvent对象。包括Touch的位置,历史记录,第几个手指等。
2. 事件分发类型
为ACTION_DOWN, ACTION_UP , ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL。每一个完整的事件以ACTION_DOWN开始,ACTION_UP结束。并且ACTION_CANCEL只能由代码引起。一般对于CANCEL的处理和UP相同。
3. 事件的处理分别为dispatchTouchEvent()分发事件,onInterceptTouchEvent()拦截事件(ViewGroup中拦截事件)。onTouchEvent()消费事件。
4. 事件从Activity.dispatchTouchEvent()开始传递,只要没有停止拦截,就会从最上层(ViewGroup)开始一直往下传,子View通过onTouchEvent()消费事件。(隧道式向下发放)。
5. 如果事件从上往下一直传递到最底层的子View,但是该View没有消费该事件,那么该事件会反序往上
传递(从该View传递给自己的ViewGroup,然后再传递给更上层的VeiwGroup直至传递给Activity.onTouchEvent())。(冒泡式向上处理)
6. 如果View没有消费ACTION_DOWN事件,之后其他的MOVE,UP等事件都不会传递过来。
7. 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()方法对事件进行拦截,停止其往下传递,如果拦截(返回true)后该事件会直接走到ViewGroup中的onTouchEvent()中,不会再传递给子View.如果从DOWN开始,之后的MOVE,UP都会直接在该ViewGroup.onTouchEvent()中处理。如果子View之前在处理摸个事件,但是后续被ViewGroup拦截,那么子View会接收到ACTION_CANCEL.
8. OnTouchListener优先于onTouchEvent()对事件进行消费。
9. TouchTarget是保存在手指点击区域属性的一个类,手指的所有移动过程都会被他记录下来,包含被touch的View.           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值