一般来说:Activity------>Window--------->DevorView(setContentView所设置的view)
即Activity中的,dispatchTouchEvent()方法{
getWindow.superDispatchTouchEvent();}
总结:
1.事件的传递时由外层往内层传递
2.事件的消费与之相反,是内层往外层传递
ViewGroup传递:dispatchTouchEvent()---------interceptTouchEvent()--------onTouchEvent()
View :dispatchTouchEvent()-------onTouchEvent()
ViewGroup中:
dispatchTouchEvent()默认为true即默认传递
interceptTouchEvent()默认为false不拦截事件
onTouchEvent()默认为false不处理事件
View中:
dispatchTouchEvent()默认为false即默认不传递,因为没有下层传递了
且也不需要拦截,
onTouchEvent()默认为true,默认view消费事件,如果返回false,则事件往上层传递
mFirstTarget:在dispatchTouchEvent()中,当子view消费了ACtion_DOWN事件,那么给mFirstTarget赋值,否则为null
if(mFirstTarget!=null || actionMasked==MotionEvent.ACTION_DOWN){
final boolean disallowIntercept=(**& FLAG_DISALLOW_INTERCEPT)!=0;
if(!disallowIntercept){
//如果允许拦截
intercepted=onIntercepteEvent(ev);
}else {不允许拦截的话,就不能拦截,不执行onIntercept
intercepted=false;}
else {
如果子view不消费ACTION_DOWN事件,并且不为ACTION_DOWN事件,那么
不往下传递,直接拦截
intercepted=true; }
if(!cancel&&!intercepted){不拦截并没有取消就向下传递事件
dispatchTransforTouchEvent
newTouchTarget=addTouchTarget(,,,,,,)该方法中设置mFirstTarget}
网友评论