事件分发机制

知识点


事件分发,拦截与消费

类型相关方法ActivityViewGroupView
事件分发dispatchTouchEvent
事件拦截onInterceptTouchEvent××
事件消费onTouchEvent×

例如:
同一button 同时接受Click 事件和Touch 事件,Touch 事件返回false

button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
            Log.d(TAG,"onClick");
      }
});
button.setOnTouchListener(new View.OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
           Log.d(TAG,"onTouch: "+event);
           return false;
     }
});

输出:OnTouch 返回的是false,所以两个事件都会接受

 onTouch: MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=79.0, y[0]=86.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=12617717, downTime=12617717, deviceId=6, source=0x1002 }
 onTouch: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=79.0, y[0]=86.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=12617799, downTime=12617717, deviceId=6, source=0x1002 }
 onClick

将Touch 事件返回值改为true

button.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
         Log.d(TAG,"onTouch: "+event);
         return true;
        }
   });

不会再处理onClick 事件
输出:

onTouch: MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=104.0, y[0]=71.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=12826790, downTime=12826790, deviceId=6, source=0x1002 }
onTouch: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=104.0, y[0]=71.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=12826890, downTime=12826790, deviceId=6, source=0x1002 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值