关于事件分发的一些意见

关于事件分发的一些意见

https://blog.csdn.net/wzlyd1/article/details/81104519

一、设置clickable属性会执行intercept 的Move分支,因为这样你的view的onTouchEvent会返回true。代表消费了事件,mFirstTarget 会被赋值,然后mFirstTarget !=null 为true,在下次事件来临的时候,会继续执行onInterceptTouchEVENT

如果没有view消费事件,mfirsttarget会null。下次事件过来就不走onIntercept分支了,直接事件分发,由于没人管这个事件,事件就被冒泡处理了

就设置clickable为true就行了,view的这个属性为true的话,onTouchEvent会直接返回true。这个不算啥问题,我就是好奇没执行move分支而已。或者你让你的子View去消费一下事件,都可以,clickable为true最简单·

事件分发机制 说 是说不明白的,得自己去fuck souce code ,解决几个事件冲突

总结来说就是,只有你的子View说明要消费事件了,那么down move 和up才会走到intecept的分支里面去,如果子View没有消费,那么下次事件来的时候,也就不走intercept了,直接略过,然后分发事件,因为你的子View不处理事件,事件又会被冒泡处理,那么,你Viewgoup的ontouchevent事件将被执行。这也就是为啥说这个的原因

拦截不拦截事件,ontouchevent都会走,onTouchEvent执不执行受两点影响,一个是是否拦截,拦截了,就执行,没毛病。但是不拦截也可能会被执行,因为会被冒泡处理,这要看你的子View有没有处理事件,任玉刚写的伪代码,将intercept 作为ontouchEvent的先决条件了,让我误解了(API26)

二、viewgroup重写了disspatch方法,本方法的onTouchEvent是不会走的. 返回true消耗掉了返回false 事件给父类的onTouch了

在viewgroup中只有disspatch返回super,intercept才会执行.

intercept里面拦截滑动时间,又不拦截点击事件,怎么会影响到子控件的点击事件呢?

down 和 up是不拦截的

move只有在满足滑动条件的时候才拦截

View的点击事件是写在up分支里的,我们并不拦截up

Viewgroup的dispacth方法,如果子View返回false了,那么group也是false了

这个处理指的是冒泡处理,不是被线性处理的

现在的事件分发需要加上nestscroll了