美文网首页
事件分发

事件分发

作者: 大王要我来巡山 | 来源:发表于2016-11-17 16:27 被阅读0次

    拿 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

    相关文章

      网友评论

          本文标题:事件分发

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