View和ViewGroup的事件分发机制详解

下面先说View的事件分发,背景:

1.自定义MyButton控件继承自Button,在其中重写dispatchTouchEvent()和onTouchEvent()方法

2.编写xml布局文件,在主Activity中实例化控件MyButton,并在按钮上添加setOnTouchListener的监听事件,监听事件中会重写onTouch方法。

点击MyButton按钮,并稍微挪动一下,然后会看到执行顺序为:

dispatchTouchEvent()  ---->setOnTouchListener的onTouch() ---------->onTouchEvent()

当设置了setOnTouchListener,并返回了true,那么MyButton的onTouchEvent就不会被执行

下面讲ViewGroup的事件分发机制,背景:

1.自定义MyLinearLayout继承自LinearLayout,在MyLinearLayout中重写dispatchTouchEvent(),onTouchEvent()和onInterceptTouchEvent()方法

2.在xml文件中让MyLinearLayout包含上面的MyButton控件,并将其显示在主Activity中

点击MyButton按钮,并稍微挪动一下,然后会看到执行顺序为:

MyLinearLayout的dispatchTouchEvent -> MyLinearLayout的onInterceptTouchEvent -> MyButton的dispatchTouchEvent ->Mybutton的onTouchEvent 

当onInterceptTouchEvent 返回true时,子View的事件将被拦截,后续动作都不会被触发,ViewGroup的onTouchEvent被触发

没有拦截时,将交给子View处理,ViewGroup将不处理,ViewGroup的OnTouchEvent将不被触发

子View可以通过调用getParent().requestDisallowInterceptTouchEvent(true);  阻止ViewGroup对其MOVE或者UP事件进行拦截;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值