Android事件分发总结

    从今天开始写读书笔记,希望自己每天都可以坚持下来,在Android开发的道路上越走越远。

    一、事件分发的对象及其方法。

    Android事件分发的对象有2个,View和ViewGroup。

    View的事件有2个:dispatchTouchEvent() 和 onTouchEvent()

    ViewGroup的事件有3个:dispatchTouchEvent() 、 onTouchEvent() 和 onInterceptTouchEvent()

    二、触摸事件的类型。

    触摸事件对应的是MotionEvent类,事件的主要类型有3种。

    ACTION_DOWN:用户手指按下操作,一次按下操作标志着一次触摸事件的开始。

    ACTION_MOVE:用户按下之后,手指在屏幕上滑动的操作。

    ACTION_UP:    用户手指离开屏幕,一次提起操作标志着一次触摸事件的结束。

    一次完整的Touch事件,至少由1次ACTION_DOWN和1次ACTION_UP和若干个(可以为0)ACTION_MOVE事件组成。

    三、事件传递的三个阶段。

    分发(Dispatch):事件的分发对应着dispatchTouchEvent方法,在Android系统中,所有的触摸事件都是通过这个方法来分发的。方法返回为true则表示该事件被消费,不往下进行分发,否则,进行事件分发。

    拦截(Intercept):事件的拦截对应着onInterceptTouchEvent方法,这个方法只在ViewGroup及其子类中才存在。返回true表示拦截这个事件,不继续分发给子视图,同时交由自身的onTouchEvent方法进行消费,否则表示不对事件进行拦截,需要继续分发给子视图。

    消费(Consume):事件的消费对应着onTouchEvent方法,该方法返回true表示当前视图可以处理对应的事件,事件将不会向上传递给父视图;返回false表示当前视图不处理这个事件,事件会被传递给父视图的onTouchEvent方法进行处理。

    四、事件分发流程图。

    1.View的一次点击事件图:

    

    2.ViewGroup中的View的点击事件流程:

    

    五、总结。

    1.事件分发都是从外层向内层进行分发,若不干涉,则会传递到视图底层进行事件处理;

    2.ViewGroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回true,则事件不会传递到子View;

    3.在子View中对事件进行消费后,ViewGroup将接受不到任何事件。


    



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值