美文网首页
问:Android的事件分发机制流程是怎么样的?

问:Android的事件分发机制流程是怎么样的?

作者: 超级绿茶 | 来源:发表于2020-09-14 08:31 被阅读0次

问:Android的事件分发机制流程是怎么样的?
这道题描述起来还真有点费劲,先思考下,答案在美女下面


美女镇楼

答案:

这个问题可以写个长篇大论,但在面试时被问到时要从以下几个方面入手。
记住这个原则:Android的事件总是从父控件往子控件分发。子控件都不处理时事件再回传父控件。很多问题可以根据这个原则推导出来。

三个方法:

  • dispatchTouchEvent:负责接收事件,返回false则表示向子控件分发事件。
  • onInterceptTouchEvent:返回true表示拦截,同时调用onTouchEvent方法。
  • onTouchEvent:处理事件,一般重写此方法,返回true表示消耗掉该事件并不再传递下去,返回false表示不处理事件并把事件退回父控件。

View和ViewGroup

所有的控件都继承自View。
所有的布局都继承自ViewGroup,ViewGroup则继承自View。
View没有onInterceptToutchEvent方法,所以dispatchTouchEvent直接调用onTouchEvent。

流程(Activity > ViewGroup > View)

  1. Activity是事件的起点,事件分被封装成MotionEvent对象发给Activity的dispatchTouchEvent方法。
  2. dispatchTouchEvent内部会把事件传给setContentView指定的布局,即根布局ViewGroup。
  3. 根布局的dispatchTouchEvent在接收到事件后调用onInterceptTouchEvent方法。
  4. onInterceptTouchEvent方法会判断是否拦截该事件,如果拦截就将事件传给onTouchEvent方法处理。不拦截就直接把事件传给子控件。
  5. onTouchEvent方法负责处理事件,返回值决定是否要消费掉该事件,返回true表示以后由此控件来处理该事件,返回false表示以后也不再接收该事件。
  6. 当所有控件的onTouchEvent都返回false时事件由Activity的onTouchEvent来处理。

优先级

OnTouchListener,onTouchEvent,onClickListener执行顺序
onTouch(ACTION_DOWN) => onTouchEvent(ACTION_DOWN) => onTouch(ACTION_UP) => onTouchEvent(ACTION_UP) => onClick

点击链接加入QQ群聊:https://jq.qq.com/?_wv=1027&k=5z4fzdT
或关注微信公众号:口袋里的安卓

相关文章

网友评论

      本文标题:问:Android的事件分发机制流程是怎么样的?

      本文链接:https://www.haomeiwen.com/subject/fyuaektx.html