Android view事件分发总结

事件分发的关系伪代码:
public boolean dispatchTouchEvent(MotionEvent ev){
	boolean consume = false;
	if(onInterceptTouchEvent(ev)){
		consume = onTouchEvent(ev);
	}else{
		consume = child.dispatchTouchEvent(ev);
	}
	return consume;
}
1、一般情况是不对dispatchTouchEvent()进行改写的,通常是改写onInterceptTouchEvent、onTouchEvent以到达拦截事件的目的,当一个控件对某个事件拦截成功了,那么接下来同一系列的事件都将会有该控件来处理,此后onInterceptTouchEvent就不会被调用了
     是否将事件交个某个控件处理,关键就是看ActionDown了,如果截获了ActionDown,那么接下来的事件都会由该控件处理,否则将交由其他控件处理。

2、关于onTouch()、onTouchEvent()、onClick()的优先级问题(onTouch()在OnToucheListener()中设置,onClick()在OnClickListenter()中设置)
    onTouch>onTouchEvent>onClick
    只有当onTouch反会false时,onTouchEvent才会被调用,只有当onTouchEvent返回false时,onClick才会被调用。

3、事件的传递顺序:Activity->Window->View

4、ViewGroup默认不拦截任何事件,即onInterceptTouchEvent()方法返回false。View没有onInterceptTouchEvent()方法,直接掉用onTouchEvent()方法,默认是会对事件进行消耗的,即返回true。

5、View的enable属性不会对onTouchEvent()的返回值产生影响,但clickable、longclickable属性会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值