美文网首页
android-事件体系

android-事件体系

作者: 三季人 | 来源:发表于2018-08-20 16:53 被阅读32次

    View事件event

    什么是事件,当用户触摸屏幕的时候,就会产生一个事件event

    事件相关的细节(发生触摸的位置、时间、历史记录、手势动作等都封装在MotionEvent中)


    touch事件有如下四种:

    1. MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
    2. MotionEvent.ACTION_MOVE:滑动View
    3. MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
    4. MotionEvent.ACTION_UP:抬起View(与DOWN对应)

    事件列表
    android 事件从产生到结束一共经过如下这几个过程

    • 用户按下view->actiondown-按下
    • 用户滑动view->actionmove-移动
    • 用户抬起手->actionup-抬起 结束

    事件的分发机制

    android 事件分发主要有三个方法控制:

    1. onDispatchTouchEvent()   事件的分发
    2. onInterceptTochEvent()    事件的拦截
    3. onTouchEvent()       事件的消费
    
    onDispatchTouchEvent() 事件的分发
    属性 介绍
    作用对象 Activity、ViewGroup、View
    作用 分发点击事件
    调用时刻 当点击事件能够传递给当前对象的时候,就会调用该方法
    返回结果 是否消费当前事件:详细情况如下

    返回super.dispatchTouchEvent(ev) 表示调用父类中的方法

    1. 返回true 表示
      • 消费这个事件
      • 事件不会向下传递
      • 后续的(move、up)会继续分发给该view
    2. 返回false 表示
      • 不消费这个事件
      • 事件也不会向下传递
      • 将事件回传给父类的onTouchEvent()
      • 后续的(move、up)会继续分发给该view

    注意: 有一个特例: 在activity中,onDispatchTouchEvent()返回false的时候,表示消费事件

    onTouchEvent()

    onTouchEvetn与onDispatchTouchEvent()类似

    属性 介绍
    作用对象 Activity、ViewGroup、View
    作用 处理点击事件
    调用时刻 在onDispatchTouchEvent()内部调用
    返回结果 是否消费处理当前事件:详细情况如下
    1. 返回true

      • 自己消费处理事件
      • 事件停止传递
      • 后续事件也由自己处理
    2. 返回false

      • 不处理消费事件
      • 事件向上传递给父类的onTouchEvent()处理
      • 当前view不再接受处理其他事件(move、up)
    onDispatchTouchEvent()

    onDispatchTouchEvent只有GroupView才有此方法

    属性 介绍
    作用对象 ViewGroup(注:Activity、View中都没有)
    作用 处理拦截事件
    调用时刻 ViewGroup中onDispatchTouchEvent()内部调用
    返回结果 是否拦截当前事件:详细情况如下
    1. 返回true

      • 拦截事件
      • 事件不会向下传递
      • 自己处理事件,即调用自己的onTouchEvent()
      • 同一个事件列中的事件都由该事件处理
    2. 返回false

      • 不拦截事件
      • 事件会向下传递
      • 事件传递到子view,调用子view的onDispatchTouchEvent()处理
      • 当前view任然接受其他事件(和onTouchEvent()不同)

    参考:

    View的事件体系

    Android事件分发机制详解:史上最全面、最易懂

    相关文章

      网友评论

          本文标题:android-事件体系

          本文链接:https://www.haomeiwen.com/subject/vgmliftx.html