android 事件触发,Android事件触发机制

事件分发分捕获和执行两个阶段

事件传递,即捕获,就是执行dispatchTouchEvent()方法,再执行onInterceptTouchEvent()方法。

事件处理就是执行onTouchEvent()方法。

事件的返回值含义:

当事件在传递的过程中,返回值:True,拦截,不继续;False,不拦截,继续流程,传递给下一级。

当事件在处理的过程中,返回值:True,处理了,不用审核了;False,交给上一级处理。

对于ViewGroup,需要重写三个方法:

@Override

public boolean dispatchTouchEvent(MotionEvent event)

{

Log.d(TAG, "ViewGroup dispatchTouchEvent" + event.getAction());

return super.dispatchTouchEvent(event);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent event)

{

Log.d(TAG, "ViewGroup onInterceptTouchEvent" + event.getAction());

return super.onInterceptTouchEvent(event);

}

@Override

public boolean onTouchEvent(MotionEvent event)

{

Log.d(TAG, "ViewGroup onTouchEvent" + event.getAction());

return super.onTouchEvent(event);

}

对于View,需要重写如下两个方法:

@Override

public boolean dispatchTouchEvent(MotionEvent event)

{

Log.d(TAG, "View dispatchTouchEvent" + event.getAction());

return super.dispatchTouchEvent(event);

}

@Override

public boolean onTouchEvent(MotionEvent event)

{

Log.d(TAG, "View onTouchEvent" + event.getAction());

return super.onTouchEvent(event);

}

dispatchTouchEvent(...):

作用:决定事件是否由onInterceptTouchEvent拦截处理;

当返回super.dispatchTouchEvent(...)时,由onInterceptTouchEvent来决定事件的流向,onInterceptTouchEvent返回值为false时,继续向子View分发事件,本View只处理ACTION_DOWN事件。

当onInterceptTouchEvent返回值为true时,不继续向子View分发事件,本View处理所有事件。

onInterceptTouchEvent(...):

作用:拦截事件,决定是否将事件传递给子View;

当返回值为false时,事件继续传递给子View;

当返回值为true时,事件交给onTouchEvent(...)处理,不再向子View传递。

onTouchEvent(MotionEvent event):

作用:事件最终到这个方法,由此方法处理事件;

当返回值为false时,事件继续向上传递给其父View的onTouchEvent()方法,直到根View的,一直传递到根View时,返回值都是false,也就是说在事件传递过程中没有View的onTouchEvent()方法返回true,此次手势就会结束,此次事件就会被取消。

当返回值为true时,此View处理所有事件,并且处理的事件不会再向上返回。也就是说在值为true时,此手势的所有事件都传递给此View的onTouchEvent()处理,包括ACTION_DOWN、ACTION_UP、ACTION_MOVE等事件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值