android开发:探索学习Android Touch事件分发传递机制(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39027256/article/details/102769022

先贴个流程图:

 1.当我我们点击屏幕时,触发Activity的dispatchTouchEvent()方法,如果它返回true或者false则代表事件被消费(不再传递),返回super()时则会传到ViewGroup的dispatchTouchEvent()方法。

2.当ViewGroup的dispatchTouchEvent()方法返回true时,代表事件被消费。如果返回false则会把该事件返回到Activity的onTouchEvent()方法进行处理,返回super()则事件传递到ViewGroup的onInterceptTouchEvent()方法,onInterceptTouchEvent()返回true代表拦截该事件,则把事件交给ViewGroup的onTouchEvent()方法处理,如果它返回的是false或者super(),则代表不拦截该事件,所以事件会传递到View的dispatchTouchEvent()

3.当view的dispatchTouchEvent()返回true时同样代表事件被消费,返回false则事件会传递到ViewGroup的onTouchEvent(),返回super()事件传递到View的onTouchEvent()方法,onTouchEvent()返回ture代表事件被消费,返回false则事件传递回上一层的onTouchEvent();

总结:

对于dispatchTouchEvent()方法:

  • return true:消费掉事件,终止传递。
  • return false: 将事件传递给上一级View的onTouchEvent()方法。如果是Activity的dispatchTouchEvent()方法,则也是消费掉事件,终止传递。
  • return super:如果是Activity,则传给下一级view(viewGroup)的dispatchTouchEvent;如果是ViewGroup,则传给自己的onInterceptTouchEvent();如果是View,则传给自己的onTouchEvent().


.对于onInterceptTouchEvent()方法:

  • return true:将事件传递给ViewGroup自己的onTouchEvent()方法处理。
  • return false/super:将事件传递给下一级View的dispatchTouchEvent()。
  • onInterceptTouchEvent()方法是viewGrounp特有的

对于onTouchEvent()方法:

  • return true:消费掉事件,终止传递。
  • return false/super:将事件传递给上一级view的onTouchEvent()方法。
  • Activity的onTouchEvent()方法不管返回什么都会终止事件

网上看了很多篇文章,写的都不是很好,特别是画图画的云里雾里,看都看不懂。最后发现掘金有篇文章写的不错:

https://juejin.im/post/5a0fab1bf265da432d27ad70

猜你喜欢

转载自blog.csdn.net/qq_39027256/article/details/102769022
今日推荐