background image

 

[  置顶

 

 ]  

 

  

Android

 

 

  

  

事件分发机制完全解析,带你从源码的角度彻底理解

 

 

(

  

   

)

  

其实我一直准备写一篇关于

Android 事件分发机制的文章,从我的第一篇博客开始,就零零散散在好多地方使用到了 Android 事件分发的知识。也有好多

朋友问过我各种问题,比如:

onTouch 和 onTouchEvent 有什么区别,又该如何使用?为什么给 ListView 引入了一个滑动菜单的功能,ListView 就不能滚

动了?为什么图片轮播器里的图片使用

Button 而不用 ImageView?等等……对于这些问题,我并没有给出非常详细的回答,因为我知道如果想要彻底搞

明白这些问题,掌握

Android 事件分发机制是必不可少的,而 Android 事件分发机制绝对不是三言两语就能说得清的。

在我经过较长时间的筹备之后,终于决定开始写这样一篇文章了。目前虽然网上相关的文章也不少,但我觉得没有哪篇写得特别详细的

(也许我还没有找

),多数文章只是讲了讲理论,然后配合 demo 运行了一下结果。而我准备带着大家从源码的角度进行分析,相信大家可以更加深刻地理解 Android 事件

分发机制。

阅读源码讲究由浅入深,循序渐进,因此我们也从简单的开始,本篇先带大家探究

View 的事件分发,下篇再去探究难度更高的 ViewGroup 的事件分发。

那我们现在就开始吧!比如说你当前有一个非常简单的项目,只有一个

Activity,并且 Activity 中只有一个按钮。你可能已经知道,如果想要给这个按钮

注册一个点击事件,只需要调用:

1

button.setOnClickListener(

new

 OnClickListener() {  

2

    

@Override

  

3

    

public

 

void

 onClick(View v) {  

4

        Log.d(

"TAG"

"onClick execute"

);