Android之事件分发机制

关于Android中的事件分发机制分两种:
1. View的事件十分机机制:
http://blog.csdn.net/sinyu890807/article/details/9097463
2..ViewGroup的事件分发机制
http://blog.csdn.net/guolin_blog/article/details/9153747

关于我自己理解的一些知识点:
基于ViewGroup和View的事件分发
首先涉及到三个方法:

 @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.d(TAG, "dispatchTouchEvent: ");
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d(TAG, "onTouchEvent: ");
        return super.onTouchEvent(event);
    }

事件分发:
事件的传递首先先到的是Activity,然后交由window处理,window的直接子类phoneWindow调用superDispatchTouchEvent方法,在该方法中将事件传递给DecorView,至此事件就从activity传到我们的View/ViewGroup了.之后进行点击事件的分发和处理.

关于dispatchTouchEvent

//  super.dispatchTouchEvent(ev);表示会调用子类的分发机制,不管这里返回true或false,都不会再调用子类的分发机制,
//  它表示是否分发这个消息,不分发,也不会得到处理.

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.d(TAG, "dispatchTouchEvent: ");
        return super.dispatchTouchEvent(ev);
    }
// 在拦截之后,会由本层的onTouchEvent来处理事件,再一级一级往父类传递
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return true;
    }
// 这个是ViewGroup中的方法,所以他是属于ViewGroup中事件分发机制的,

ontouchEvent的处理机制
Butotn –> … –> layout –> … –> activity(和dispathTouchEvent的方向相反的)
如果返回为true,表示处理了,就不会继续往下传播..
如果在往下返回ontouchEvent的时候,都是false,Activity层的也是false,最后处理事件的是Activity层的onTouchEvent(因为推到最后一个人身上了, 不处理也得处理,哈哈哈哈哈.)

  @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d(TAG, "onTouchEvent: ");
        return super.onTouchEvent(event);
    }

同时要说明一点,在onTouchEvent中,会调用控件的点击事件,在Motion.UP之前会调用onLongClickListener,之后会调用onClickListener..如果onTouchEvent不是返回super.onTouchEvent(event),将不会调用到控件的点击事件.
这里写图片描述

另附几张图表示事件分发机制:
奉献者:http://blog.csdn.net/xyz_lmn/article/details/12517911
这里写图片描述
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
这里写图片描述
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………

这里写图片描述
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
这里写图片描述
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值