Android高级UI之事件传递之1

  • 点击事件的传递规则
    在介绍点击事件的传递规则之前,首先要明白这里分析的对象是MotionEvent,即点击事件。所谓的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程有三个重要的方法共同完成:dispatchTouchEvent,onInterceptTouchEvent和onTouchEvent。

    public boolean dispatchTouchEvent(MotionEvent ev)
    该方法用来进行事件的分发。如果事件能够传递给当前View,那么此方法一定会被调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件。可以在该方法中使用requestDisallowInterceptTouchEvent(true)方法(表示该view不拦截事件,将事件分发给子view)
    public boolean onInterceptTouchEvent(MotionEvent event)
    在dispatchTouchEvent内部调用,用来判断是否拦截某个事件,如果当前ViewGroup拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件
    public boolean onTouchEvent(MotionEvent event)
    在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收到事件
    在这里插入图片描述在这里插入图片描述
    即View的事件分发调用的方法顺序如下:
    1.dispatchTouchEvent()
    2.onTouchListener–>onTouch方法
    3.onTouchEvent()
    4.onClickListener–>onClick方法
    在这里插入图片描述

发布了61 篇原创文章 · 获赞 0 · 访问量 890

猜你喜欢

转载自blog.csdn.net/qq_36828822/article/details/103650560
今日推荐