码迷,mamicode.com
首页 > 移动开发 > 详细

android 事件分发机制

时间:2016-06-23 12:50:47      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

android事件分发机制中有下面三个重要方法:

dispatchTouchEvent()  
onInterceptTouchEvent()
onTouchEvent()

 

对于接受到的事件先是通过dispatchTouchEvent()方法来处理,不过View和ViewGroup的处理方式稍有不同。

源码较为复杂,我们可以将其简化来看,不过简化方法只是在部分情况下适用:

下面为简化后的ViewGroup中的dispatchTouchEvent()方法:

    public boolean dispatchTouchEvent(Motion e) {
        boolean result = false;
        if (onInterceptTouchEvent(e)) {
            result = onTouchEvent(e);
        } else {
            result = child.dispatchTouchEvent(e);
        }
        return result;
    }

 

下面为简化后的View中的dispatchTouchEvent()方法:

    public boolean dispatchTouchEvent(MotionEvent event) {
        if (mOnTouchListener.onTouch(this, event)) {
            return true;
        }
        return onTouchEvent(event);
    }

从ViewGroup的dispatchTouchEvent方法中,我们不难看出事件是从父布局向子布局传递,层层递进。

首先,ViewGroup得到事件后,由dispatchTouchEvent方法处理,再通过onInterceptTouchEvent方法判断是否拦截,若为true,则由自己的onTouchEvent方法来处理;否则交由子布局的dispatchTouchEvent处理,以此类推。

如果事件一直传递到View控件,在View控件的dispatchTouchEvent中,先交由onTouchListener的onTouch方法处理,若此方法返回true,dispatchTouchEvent方法返回true;否则由onTouchEvent方法来处理。

android 事件分发机制

标签:

原文地址:http://www.cnblogs.com/zhisuoyu/p/5610116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!