拿 button 和 linearlayout 来说
在实际情况中,是先有布局接着在布局中写控件,例如在 linearlayout 中加个button
一,linearlayout 继承自 viewgroup 而viewgroup 也继承于view
二,button 继承自textview,但textivew继承自 view
结论:关于 自身的OnTouchEvent 与 OnClick 的执行顺序的问题, linearlayout 和 button是一样的,这里呢先记住OnTouchEvent 执行在前,OnClick执行在后。
现在的问题是:事件分发是先执行linearlayout 呢还是button呢?
结论是:先执行linearlayout ,后执行button
ps:可以先去写几句代码,把linearlayout 和button的 TouchEvent和Click都重写,并打印log,结果会发现,是先打印完了button的两个事件后再打印的linearlayout的事件,这不是奇怪吗?
说明一下:在viewgroup中有个 onInterceptTouchEvent(),这个方法中的源码是先判断要不要打印 child view,然后才打印自己的内容。
说白了,button之所以能打印是经过了linearlayout允许的。
总结一下,两个地方
想中断linearlayout 和 button之间的联系,就重写linearlayout 的 onInterceptTouchEvent() 返回true
想中断linearlayout 或者 button 的 touch与click 之间的联系 就 重写 onTouchEvent() 返回 true