Android事件分发机制

来源:互联网 发布:澳洲工作 知乎 编辑:程序博客网 时间:2024/06/03 11:54
最近在准备面试,所以重新学习总结一下面试时一些概率性出现的问题。今天学习总结的是Android的事件分发机制,我是通过该视频学习的,分享给有需要的小伙伴~



学习笔记:

最常见的几个触摸事件:ACTION_DOWN、ACTION_MOVE、ACTION_UP ...

事件分发的顺序:从父到子,即从Activity-->Layout-->控件,由外向内

事件消费(处理)顺序:从子到父,即从控件-->Layout-->Activity,由内向外,如果控件不做消费,Layout不做消费,那最后的消费就由Activity处理

附:(来源)

事件分发核心的几个方法:
方法1:分发触摸事件
@Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return super.dispatchTouchEvent(ev);//注意:这里不能直接返回true或false,否则onTouchEvent()不执行    }

方法2:触摸事件处理(消费方法)
@Override    public boolean onTouchEvent(MotionEvent event) {        return super.onTouchEvent(event);    }

方法3:拦截触摸事件
@Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        return super.onInterceptTouchEvent(ev);    }
其中方法1和2在Activity、View、ViewGroup中都有,但是方法3只有ViewGroup中有

事件分发的用处:自定义分发的顺序,解决事件冲突
例如:ScrollView和ListView的冲突,我们可以这样做:
1.重写ListView的onInterceptTouchEvent()并返回true
2.重写ListView的onTouchEvent并在返回前调用下方的方法,告知父控件,不想它拦截自己的方法
getParent().requestDisallowInterceptTouchEvent(true);


0 0
原创粉丝点击