android ViewGroup到View的触摸事件传递机制

看了很多关于触摸事件的文章,总感觉啰嗦了一大堆,但是什么都没讲明白,新手看了可能反而更乱。这里总结下自己关于触摸事件的理解。

Android 的触摸事件离不开三个方法

dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent

这三个方法是干嘛的呢

第一个dispatchTouchEvent用于对事件进行分发,举个例子分糖果

糖果第一个分到dispatchTouchEvent手上,然后dispatchTouchEvent如果返回了true那么说明他把糖果(事件)占为己有。后面的onInterceptTouchEvent和onTouchEvent里的代码也就没了执行的机会。如果返回false了会怎么样呢?大家可能会以为是继续往下传递,其实不是的,返回false意思相当于dispatchTouchEvent摇头说我不要糖果还给你(把事件丢给了父View的onTouch处理了)

那么什么时候后面的才能分到糖果呢?

当dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候才会把事件往下传递

这个时候如果是在ViewGroup那么会先传递到onInterceptTouchEvent中来onInterceptTouchEvent如果返回了true那么ViewGroup的onTouchEvent才会被执行,onInterceptTouchEvent如果返回了false或者super.onInterceptTouchEvent()那么事件才能轮到子View来享用。和父View一样,事件先来到了子View的dispatchTouchEvent方法然后子View的dispatchTouchEvent也一样返回true就把事件占为己有(只执行dispatchTouchEvent自己的move和up事件)返回false就把事件丢给父View的onTouch处理,由于View是没有onInterceptTouchEvent方法的,所以dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候子View的onTouch都会被执行。那么onTouch自己呢。如果onTouch返回true那么这个事件就已经被消费了,如果返回false,那么onTouch会把事件继续传递给父View的onTouch这样父子View的onTouch里的代码就都会被执行了。文字帮助理解大家就着文字看图更好理解

图片转载自Android面试——>Android基础进阶_Jeled的博客-CSDN博客

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值