安卓学习-事件分发

#安卓学习之事件分发
##事件分发涉及3个方法
    1.public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        手按下时调用
        case MotionEvent.ACTION_DOWN:
            break;
        手按移动调用
        case MotionEvent.ACTION_MOVE:
            break;
        手按离开调用
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
        return super.dispatchTouchEvent(ev);
    }
    @Override
    2.public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        手按下时调用
        case MotionEvent.ACTION_DOWN:
            break;
        手按移动调用
        case MotionEvent.ACTION_MOVE:
            break;
        手按离开调用
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
    
        return super.onTouchEvent(event);
    }
    //拦截事件方法,只有容器类组件有此方法
    @Override
    3.public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        手按下时调用
        case MotionEvent.ACTION_DOWN:
            break;
        手按移动调用
        case MotionEvent.ACTION_MOVE:
            break;
        手按离开调用
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
        return super.onInterceptTouchEvent(ev);
    }


##如图所示三个颜色分别代表三个控件
    紫:继承view
    黄: 继承LinearLayout
    蓝:继承RelativeLayout    

#控件叠加之事件分发
###以上三个颜色依次叠加在一个容器里
###点击紫
    1.叠加在最表面的控件先执行以上三个方法,然后依次向内执行(默认执行顺序)
    2.哪个方法返回true就不再向下执行
    紫:dispatchTouchEvent。。。DOWN
    紫:onTouchEvent。。。。。。DOWN
    黄:dispatchTouchEvent。。。DOWN
    黄:onInterceptTouchEvent。DOWN
    黄:onTouchEvent。。。。。。DOWN
    蓝:dispatchTouchEvent。。。DOWN
    蓝:onInterceptTouchEvent。DOWN
    蓝:onTouchEvent。。。。。。DOWN
    都没有处理这个事件,最后被activity处理了,所以手放开后,这几个控件的事件处理方法不再被调用
    3.如果给黄色设置点击事件(点击紫)
    紫:dispatchTouchEvent。。。DOWN
    紫:onTouchEvent。。。。。。DOWN
    黄:dispatchTouchEvent。。。DOWN
     黄:onInterceptTouchEvent。DOWN
     黄:onTouchEvent。。。。。。DOWN
    放手时调用,只调用处理了此事件的view的方法
     黄:dispatchTouchEvent。。。UP
    黄:onTouchEvent。。。。。。UP
     黄:onClick


#父控件子控件之事件分发
###将紫色作为子控件放到黄色里,再将黄色作为子控件放到蓝色里
###点击紫
    1.由父控件向里依次执行如下方法,再由里到外执行onTouchEvent方法(点击紫)
    (手按下和放开)
     蓝:dispatchTouchEvent。。。。DOWN
     蓝:onInterceptTouchEvent。。DOWN
     黄:dispatchTouchEvent。。。。DOWN
     黄:onInterceptTouchEvent。。DOWN
     紫:dispatchTouchEvent。。。。DOWN
    紫:onTouchEvent。。。。。。。DOWN
    黄:onTouchEvent。。。。。。。DOWN
     蓝:onTouchEvent。。。。。。。DOWN
    都没有处理这个事件,最后被activity处理了,所以手放开后,这几个控件的事件处理方法不再被调用

    2.当黄色的onTouchEvent返回true(点击紫)
    事件也要先传递到最里面的子控件,再由里到外执行onTouchEvent方法,直到执行到返回ture的为止。当手放开时事件只传到onTouchEvent返回true的那个控件。
    (手按下)
    蓝:dispatchTouchEvent。。。。。DOWN
     蓝:onInterceptTouchEvent。。。。DOWN
     黄:dispatchTouchEvent。。。。。DOWN
     黄:onInterceptTouchEvent。。。。DOWN
     紫:dispatchTouchEvent。。。。。DOWN
    紫:onTouchEvent。。。。。。。。DOWN
    黄:onTouchEvent。。。。。。。。DOWN
    (手放开)
    蓝:dispatchTouchEvent。。。。。UP
    蓝:onInterceptTouchEvent。。。UP
     黄:dispatchTouchEvent。。。。。UP
     黄:onTouchEvent

    3.截断获共享事件的操作
    一般不改写dispatchTouchEvent的方法,而是重写onInterceptTouchEvent方法
    或者控制返回值true或false.
    
    4.如果给黄设置点击事件,则代表黄的onTouchEvent返回true(点击紫)
      点击事件的方法在抬手后调用,如下:
    (手按下)
    蓝:dispatchTouchEvent。。。。。DOWN
     蓝:onInterceptTouchEvent。。。。DOWN
     黄:dispatchTouchEvent。。。。。DOWN
     黄:onInterceptTouchEvent。。。。DOWN
     紫:dispatchTouchEvent。。。。。DOWN
    紫:onTouchEvent。。。。。。。。DOWN
    黄:onTouchEvent。。。。。。。。DOWN
    (手放开)从父控件开始调用方法,直到手按下时处理了那个事件的View为止
    蓝:dispatchTouchEvent。。。。。UP
    蓝:onInterceptTouchEvent。。。UP
     黄:dispatchTouchEvent。。。。。UP
     黄:onTouchEvent。。。。。。。。。UP
    黄:test(3821): onClick

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值