Android故事会:事件传递机制

一、小故事目标

        帮助Android初级和中级开发同学,可以更容易理解Android事件传递机制。本文旨在以故事的形式,让Android事件传递机制更加形象生动,帮助读者入门。入门之后,读者可以再去看其他更有深度的博文,或者自己去阅读源码也未尝不可。

二、百字小故事 

        A地发生了车祸。B交警指挥中心需要去负责处理。B交警指挥中心了解情况后,觉得需要派人去现场。B交警指挥中心安排了D交警去负责处理。D交警对事故进行处理,并把结果上报给B交警指挥中心。

三、小故事拆解

        A地:Android Framework

        车祸:MotionEvent(点击事件)

        A地发生了车祸:Android Framework收到MotionEvent

        B交警指挥中心:ViewGroup

        负责处理:dispatchTouchEvent(MotionEvent)

        B交警指挥中心需要去负责处理:ViewGroup的dispatchTouchEvent(MotionEvent)被调用

        B交警指挥中心了解情况后,觉得需要派人去现场:ViewGroup的onInterceptTouchEvent(MotionEvent)被调用,并返回false

        B交警指挥中心安排了D交警去负责处理:ViewGroup调用了View的dispatchTouchEvent(MotionEvent)

        进行处理:onTouchEvent(MotionEvent)

        D交警对事故进行处理,并把结果上报给B交警指挥中心:View的onTouchEvent(MotionEvent)结果为true,并返回给ViewGroup的dispatchTouchEvent(MotionEvent)。

四、小故事重点

        dispatchTouchEvent(MotionEvent):表示负责处理,其实也是ViewGroup或View对外的接口。表达把责任传递给它。

        onTouchEvent(MotionEvent):表示进行处理,其实就是具体的处理细节。

        onInterceptTouchEvent(MotionEvent):表示判定是否要把责任交给下级,也就是是否调用子View的dispatchTouchEvent(MotionEvent)。

五、小故事代码

        1. ViewGroup.dispatchTouchEvent(MotionEvent)

        2.        ViewGroup.onInterceptTouchEvent(MotionEvent)返回false

        3.        View.dispatchTouchEvent(MotionEvent)

        4.                View.onTouchEvent(MotionEvent)

六、小故事扩展

        View中还有一个setOnTouchListener(OnTouchListener)方法。OnTouchListener可以理解为D交警还有一个实习生C。onTouch(View, MotionEvent)返回true表示实习生可以解决,就不再需要调用onTouchEvent(MotionEvent)让交警来解决了。

七、小故事演练

        不同的调用情况,可以对应到这个故事框架中的不同情况中去。可以去找一个Android事件传递U型图的博客,对照着讲下这个车祸小故事。当然,为了方便读者演练,也有一个对应的demo代码,可以自己调试:afunx/XFun: It is a Android project. Just for fun. (github.com)

        链接中包含其他demo代码。事件传递相关的,请查看TouchEventMainActivity.java、TouchDemoView.java和TouchDemoViewGroup.java。也可以写出你自己的小故事。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值