Android自定义View事件分发机制

13 篇文章 0 订阅

1.为什么会有事件分发机制?

因为在Activity中会有多个view重叠,当点击屏幕上的某个点时,需要知道是谁去处理这个事件。

2.事件分发的是什么?什么是事件序列?

TOUCH事件,事件序列指的是从用户点击屏幕开始到结束,中间产生的一系列的事件。

3.事件有几种类型?

  • MotionEvent.ACTION_DOWN 按下时产生的事件
  • MotionEvent.ACTION_MOVE 滑动时产生的事件
  • MotionEvent.ACTION_UP 抬起时产生的事件
  • MotionEvent.ACTION_CANCEL 接收到Down事件,但是后续事件被拦截会出现的事件

4.事件分发流程是什么样的?

Activity->phoneWindow->DecorView->viewGroup->view最终被接收

5.事件分发具体实现?

dispatchTouchEvent:向下分发事件

OnInterceptTouchEvent:拦截事件
onTouchEvent:处理事件

6.事件优先级:

OnTouch返回false,才会走OnTouchEvent,而onClick实在OnTouchEvent里面的方法,OnLongClick返回为false,会同时响应onClick

OnTouchListner>onTouchEvent>onLongClickListener>OnClickListener(因为onClick是在up之后会调用的)

7.滑动冲突

外部拦截法:就是在ViewGroup里使用onInterceptTouchEvent()拦截
内部拦截法:在子View的dispatchTouchEvent()里调用 ,这行代码被调用,父类就不会拦截事件
当传入的参数为true时,表示子组件要自己消费这次事件,告诉父组件不要拦截(抢走)这次的事件。(不能干扰Down事件)
getParent().requestDisallowInterceptTouchEvent(true);

8.长按事件

返回false,长按的话会同时执行onLongClick和onClick;如果setOnLongClickListener返回true,表示事件被消耗,不会继续传递,只执行longClick

9.怎么让view和viewGroup同时响应点击事件?

在view中的onTouchEvent返回false,但是在返回之前调用view的onTouchEvent事件

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值