android View的点击事件分发机制的简单认知

android View的点击事件分发机制的简单认知

对MotionEvent事件的分发过程称为点击事件的分发。点击事件的分发过程由三个很重要的方法来共同完成:dispatchTouchEventonInterceptTouchEventonTouchEvent

dispatchTouchEvent

public boolean dispatchTouchEvent(MotionEvent ev)

Touch 事件发生时 ,事件最先传到当前Activity 的 dispatchTouchEvent(MotionEvent ev) 方法,由它来进行事件的分发(从根元素依次往下传递直到最内层子元素或在中间某一元素中由于某一条件停止传递)

onInterceptTouchEvent

public boolean onInterceptTouchEvent(MotionEvent ev)

在dispatchTouchEvent法内部调用,用来判断是否拦截某个事件,如果当前View拦截某个事件,那么同一个事件序列当中,此方法不再调用。返回结果表示是否拦截当前事件。如果不拦截,这个事件将会传递当该View的子View的dispatchTouchEvent中,继续往下传递。

onTouchEvent

public boolean onTouchEvent(MotionEvent ev)

当前View拦截某个事件即onInterceptTouchEvent方法返回true,如果该View设置了OnClickListener,则onTouch会被调用,否则onTouchEvent会被调用。也就是说onTouch优先级大于onTouchEvent,onTouchu会屏蔽掉onTouchEvent。true表示消耗此事件,false,则该事件会被传到父控件的onTouchEvent中。

引用Android开发艺术探索书中的一段伪代码,可以将上述三个方法的关系表现的完美。

public boolean dispatchTouchEvent(MotionEvent ev){
   boolean consume = false;
   if(onInterceptTouchEvent(ev)){
     consume = onTouchEvent(ev);
   } else {
     consume = childView.dispatchTouchuEvent(ev);
   }

     return consume;
}

相关资料:Android开发艺术探索书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值