Android 事件分发机制 理解杂谈

来源:互联网 发布:电脑屏幕声音录制软件 编辑:程序博客网 时间:2024/05/19 14:34

Android 事件分发机制 理解杂谈

Android 事件的分发机制 这个已经有很多人 分析过了,有得很详细 能够帮助我们更好的理解事件的分发机制。所以这里我就不会再过多得写这些问题了。这里主要是写 事件是怎么传递的。

  • windows , activity, view 事件传递中的作用
  • 事件传递的始终

在开始写我自己要写内容之前 先推荐两篇事件分发机制的博客,我是看了这个博客才对事件分发有了进一步的理解
Android事件分发机制完全解析,带你从源码的角度彻底理解(上) http://blog.csdn.net/guolin_blog/article/details/9097463
Android事件分发机制完全解析,带你从源码的角度彻底理解(下) http://blog.csdn.net/guolin_blog/article/details/9153761

window , activity, view 事件传递中的作用

一下是我对这3这得理解,也许存在着问题 或者是片面的 ,请大家多多的指教:

window 顾名思义window 就是我们的手机屏幕 每个手机只有这一个屏幕
activity 是应用中的一个页面,是view得容器,application通过activity将想展示的页面展示给我们(当这个activity处于 最前端时 他就获得了当前的window,我们就看到了一个鲜活的界面)
view 是显示给用户看得一个一个的组件
(以上纯属个人观点,与官方有出入的地方,请指正)

事件传递的始终

这里只说明触屏事件 。事件是从手指触到windows开始的,window已经与最前端的activity绑定 ,这样就会调用activity中dispatchTouchEvent()方法 ,源码如下:
 public boolean dispatchTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {            onUserInteraction();        }        if (getWindow().superDispatchTouchEvent(ev)) {            return true;        }        return onTouchEvent(ev);    }

我们看到这段源码 有两个if语句
1,ev.getAction() == MotionEvent.ACTION_DOWN 这个是必然成了的 ,就会执行 onUserInteraction() 方法 ,看下这个源码

   public void onUserInteraction() {    }

我们可以看到这个方法默认什么也没有,你可以实现他加上自己想要的逻辑
2,getWindow().superDispatchTouchEvent(ev) 这个判断包含连个层级 一个 getWindow()这个是获得当前的window 另一个superDispatchTouchEvent(ev)是什么呢,找源码看看
是个抽象的方法
public abstract boolean superDispatchTouchEvent(MotionEvent event);
看看注释
/**
* Used by custom windows, such as Dialog, to pass the touch screen event
* further down the view hierarchy. Application developers should
* not need to implement or call this.
*
*/
通过触屏事件 分析view的层次结构(最后说道我们不需要实现这个方法,系统已经为我们做了)。接下来就会像我在上面 转载的那两个博客一样进行事件的传递

这个是我自己的理解,希望大神给指教一下,谢谢!

0 0
原创粉丝点击