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。也可以写出你自己的小故事。

猜你喜欢

转载自blog.csdn.net/afunx/article/details/121734568
今日推荐