美文网首页Android进阶
从面试角度聊Android事件分发机制

从面试角度聊Android事件分发机制

作者: 简单1典 | 来源:发表于2019-05-14 01:49 被阅读0次

    前言

    面试经典问题Android中的事件分发机制。有很多人分析过这个问题。今天咱们从面试角度来剖析面试官想要听到的是什么,以及回答到什么程度可以及格,回答到什么程度达到优秀。

    自闭模式

    我不清楚这个机制,第一次听说。

    点评

    如果是真不会的话,也不要胡乱说,这样回答,面试官估计会很欣赏你的诚实。如果你反问一下,您能给我讲一下这个机制吗,也算是面试过程中的收获 。

    及格模式

    我了解Android中的事件分发机制,事件传递过程是Activity把事件传递给ViewGroup,然后ViewGroup把事件传递给View,如果下级不处理这个事件在返回给上级处理。

    点评

    回答到这里,说明你基本了解Android中事件分发的机制,但仅限于浅尝辄止。

    优秀模式

    Android事件分发机制
    三个重要角色
    1、Activity:接收Down点击事件,传递给Phonewindow和DecorView
    2、ViewGroup:拦截事件,或者继续传递给子View
    3、View:决定消费这个事件或者不消费从而返回给上一级
    三个核心事件
    1、dispatchTouchEvent():分发点击事件,return false 事件停止往子View传递和分发
    2、onTouchEvent() : return false 是不消费事件,并让事件往父控件的方向从下往上流动。return true 是消费事件。
    3、onInterceptTouchEvent():拦截点击事件, return false 不拦截,允许事件向子View传递, return true拦截事件,不在向子View传递事件。

    点评

    回答到这里,面试官基本听到了他想要的,也说明了你对这个问题进行了比较深入的研究。

    那么是不是这样就结束了呢?当然不是,因为目前为止也仅仅纸上谈兵而已

    精彩模式

    通过刚才优秀模式的一番回答之后,追加使用场景就完美了。
    通常可以利用事件分发机制解决滑动冲突问题

    比如ScrollView嵌套ListView都是竖向滑动的时候,滑动方向相同。就需要使用到拦截事件的方法onInterceptTouchEvent(),来决定listview要不要滑动。
    需要重写ScrollView的onInterceptTouchEvent方法。代码如下

    scevent.png

    这里我们看到Down事件里我们并没有返回false而是返回super.onInterceptTouchEvent(event),这是因为ScrollView在Down方法时需要初始化一些参数如果我们直接返回false,会导致滑动出现问题。并且前面说过ViewGroup的onInterceptTouchEvent方法是默认返回false的,所以我们这里要返回super方法才可以。

    当然还有很多其他案例不赘述。

    点评

    理论指导实践,经过这样一番庖丁解牛,面试官会很满意了。

    总结

    这样由浅入深,并且附带亮点的回答,会让面试官在短暂的时间里面,了解到你不仅深入研究系统知识,而且学以致用,能解决实际问题。那么距离Offer也就更近了。

    相关文章

      网友评论

        本文标题:从面试角度聊Android事件分发机制

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