Android事件分发及拦截机制

一、MotionEvent

        这是Android为触摸事件封装的一个类。只要是重写触摸相关方法,参数一般都含有MotionEvent,可见其重要性。其中包括的一些常用的重要属性和方法:

  • MotionEvent.ActionDown:手指按下
  • MotionEvent.ActionMove:滑动
  • MotionEvent.ActionUp:手指抬起
  • getX():获取相对于控件左上角的X轴(横向)坐标
  • getY():获取相对于控件左上角的Y轴(纵向)坐标

 

二、Touch事件相关方法

  • dispatchTouchEvent()事件分发

        当Touch事件发生时,dispatchTouchEvent()方法会以隧道方式(即从根元素依次向内层元素传递)将事件向下传递。一般来说我们不会去改写这个方法

        return true :事件交由当前view进行消费,同时事件停止向下传递

        return false:事件交由上层view或者Activity进行消费

        return super.dispatchTouchEvent():系统默认的事件分发处理逻辑

 

  • onInerceptTouchEvent()事件拦截

        该方法只有ViewGroup拥有。

        return true:表示拦截事件,把拦截的事件交由当前的view处理

        return fasle:表示不拦截事件,事件会被传递到子view的dispatchTouchEvent()来进行事件分发

 

  • onTouchEvent()事件响应

        onTouchEvent()方法会以冒泡方式(即从最内层的子元素依次向外传递)将事件向上传递。

        return true:表示消费了事件,事件停止向上传递

        return false:表示没有处理事件,事件继续向上传递

        return super.onTouchEvent():默认处理事件的逻辑,和返回false差不多

 

        我们也可以看着下图帮助理解,当ViewGroup拦截事件时就会停止向下分发并交给同层的事件消费进行处理。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值