Android的事件传递机制

控件事件的相关方法
Activity:disPatchTouchEvent(),onTouchevent()
ViewGroup:disPatchTouchEvent()onInterceptTouchEvent()onTouchEvent()
View: disPatchTouchEvent(), onTouchevent()
事件的传递是从Activity传进来,然后走到ViewGroup在到View

先看下图理解传递顺序

代码测试
Activity
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Log.d(TAG, "Activity的dispatchTouchEvent事件");
    return super.dispatchTouchEvent(ev);//false和true不向下传递事件,super事件传递
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.d(TAG, "Activity的onTouchEvent事件");
    return super.onTouchEvent(event);
}
ViewGroup
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Log.d(TAG, "(ViewGroup)---dispatchTouchEvent----activity传进来的事件");
    return super.dispatchTouchEvent(ev);//设立返回true是消费事件下面的都不会调用,false和super都是事件交给父容器处理
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    Log.d(TAG,"(ViewGroup)---onInterceptTouchEvent----dispatchTouchEvent传递进来的事件");
    return super.onInterceptTouchEvent(ev);//super和false都会把事件向下传递,true的时候才会拦截事件,把事件交给onTouchEvent处理
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.d(TAG, "(ViewGroup)---onTouchEvent----只有nInterceptTouchEvent返回true事件才到这里");
    return super.onTouchEvent(event);//true事件自己处理掉,就此不在传递,false super都是交给父容器处理
}
View
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    Log.d(TAG, "(View)----------------dispatchTouchEvent事件");
    return super.dispatchTouchEvent(event);//true该方法自己处理事件 false事件返回父容器的onTouchEvent处理 super事件交给该view的onTouchEvent处理
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.d(TAG, "(View)------------------onTouchEvent事件");
    return false;//true自己处理事件,false super事件都会返回父容器的onTouchEvent处理事件
}

   
   
 
测试输出结果
12-21 02:59:53.546 5465-5465/com.itheima.event D/MainActivity: Activity的dispatchTouchEvent事件 12-21 02:59:53.546 5465-5465/com.itheima.event D/MyViewGroup: (ViewGroup)---dispatchTouchEvent----activity传进来的事件 12-21 02:59:53.546 5465-5465/com.itheima.event D/MyViewGroup: (ViewGroup)---onInterceptTouchEvent----dispatchTouchEvent传递进来的事件 12-21 02:59:53.546 5465-5465/com.itheima.event D/MyButton: (View)----------------dispatchTouchEvent事件 12-21 02:59:53.546 5465-5465/com.itheima.event D/MyButton: (View)------------------onTouchEvent事件 12-21 02:59:53.546 5465-5465/com.itheima.event D/MyViewGroup: (ViewGroup)---onTouchEvent----只有nInterceptTouchEvent返回true事件才到这里 12-21 02:59:53.546 5465-5465/com.itheima.event D/MainActivity: Activity的onTouchEvent事件 12-21 02:59:53.621 5465-5465/com.itheima.event D/MainActivity: Activity的dispatchTouchEvent事件 12-21 02:59:53.621 5465-5465/com.itheima.event D/MainActivity: Activity的onTouchEvent事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值