android-view-事件分发

点击事件的事件分发,其实就是对MotionEvent事件的分发过程,产生MotionEvent后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。

事件传递的三个阶段:

  • 分发(Dispatch):事件分发对应dispatchTouchEvent方法。方法返回值true表示事件被当前视图消费掉,不再继续分发事件;方法返回值是super.dispatchTouchEvent表示继续分发该事件。如果当前视图是ViewGroup及其子类,则会调用onInterceptTouchEvent方法判定是否拦截该事件。
  • 拦截(Intercept):事件拦截对应onInterceptTouchEvent方法,这个方法只在ViewGroup及其子类中存在,在View和Activity中是不存在的。返回true,不会继续传递给子View,返回false或父类同名方法,则事件会继续传递给子View。
  • 消费(Consume):事件的消费对应着onTouchEvent。方法返回值true表示当前视图可以处理对应的事件,事件不会向上传递给父视图;返回值为false表示当前视图不处理这个事件,事件会传递给父视图的onTouchEvent方法进行处理。
Android系统中,拥有事件传递处理能力的类

Activity

dispatchTouchEvent

onTouchEvent

ViewGroup

dispatchTouchEvent

onInterceptTouchEvent

onTouchEvent

View

dispatchTouchEvent

onTouchEvent

返回值存在情况:false、true、父类同名方法

事件传递:由外向内

事件消费:由内向外

 

View控件事件触发顺序:

onTouch-false->onTouchEvent-->onClick

onTouch绑定OnTouchListener监听。

onTouch返回true,事件停止传递,不调用onClick;false相反。

 

页面点击事件产生后,传递过程遵循如下顺序:

Activity-->Window-->View

发布了26 篇原创文章 · 获赞 4 · 访问量 2376

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/84866651
今日推荐