美文网首页
事件传递机制

事件传递机制

作者: 魂之挽歌w | 来源:发表于2017-12-14 15:11 被阅读4次

    一般来说: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}

    相关文章

      网友评论

          本文标题:事件传递机制

          本文链接:https://www.haomeiwen.com/subject/cmttwxtx.html