android的时间分发机制

结合网上资料和自己理解写的,是个自己的总结,翻到的朋友不一定看的懂,主要参考地址如下

主要参考:http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html

http://blog.csdn.net/guolin_blog/article/details/9097463


事件分发包含 单个view中如何分发   viewgroup和view如何分发事件


在单个view中

ontouch  ontouchevent  onclick  三个方法执行顺序 从左到右

在一个view接受到触摸后  首先触发 dispatchTouchEvent(ev)方法  这个方法会先调用


ontouch方法,执行的条件是 三个

如果mOnTouchListener != null,(mViewFlags & ENABLED_MASK) == ENABLED和mOnTouchListener.onTouch(this, event)这三个条件都为真,就返回true,否则就去执行onTouchEvent(event)方法并返回。


然后如果ontouch方法返回false 才会执行 ontouchevent方法,ontouchevent返回 fasle才会返回执行onclick方法


viewgroup和view的事件传递、

这个事件分发机制是为了通过action_down 找出在哪里真正消费事件,即执行ontouchevent方法是在哪个view里,在后续的执行move 和up 以及其他的动作时直接找到view




1,事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

2,事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

3,事件响应:public boolean onTouchEvent(MotionEvent ev)


事件向下传递是通,1接收到信息 在super方法里会调用ontouch 和ontouchevent


     1.true,fasle ,super 有不同结果,// 当返回true时,收到事件,并且处理事件,事件在这个方法里消费

                                                            // 当返回false时, 表示收到事件,但不向下传递, 也不处理事件,最终由上一层的ontouchevent来响应

                                                            // super.dispatchTouchEvent(ev);其实和false结果一样,不一样的是他会调用调用ontouch 和ontouchevent

     2.

  • 如果 onInterceptTouchEvent 返回 true,则表示将事件进行拦截,并将拦截到的事件交由当前 View 的 onTouchEvent 进行处理;
  • 如果 onInterceptTouchEvent 返回 false,则表示将事件放行,当前 View 上的事件会被传递到子 View 上,再由子 View 的 dispatchTouchEvent 来开始这个事件的分发;
  • super 和false一样
    3.
  • 如果事件传递到当前 View 的 onTouchEvent 方法,而该方法返回了 false,那么这个事件会从当前 View 向上传递,并且都是由上层 View 的 onTouchEvent 来接收,如果传递到上面的 onTouchEvent 也返回 false,这个事件就会“消失”,而且接收不到下一次事件。
  • 如果返回了 true 则会接收并消费该事件。
  • 如果返回 super.onTouchEvent(ev) 默认处理事件的逻辑和返回 false 时相同。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值