美文网首页
★60.自定义控件 ★18.事件分发机制详解

★60.自定义控件 ★18.事件分发机制详解

作者: iDragonfly | 来源:发表于2017-06-30 21:10 被阅读0次

    简介

    • dispatchTouchEvent()用于管理View的触摸事件:onClick()onLongClick()onTouch()onTouchEvent()
    • View的触摸事件的调用顺序:onTouchListener() > onTouchEvent() > onLongClickListener() > onClickListener()

    ViewGroup的事件分发

    • ViewGroup的事件分发相对与View来说就要麻烦一些。
    • ViewGroup中有多个ChildView时,把所有的ChildView遍历一遍,如果触摸点在ChildView区域内就分发给这个ChildView
    • ChildView重叠导致触摸点在多个ChildView里,一般会分配给显示在最上面的ChildView

    陷阱

    代码

    <RelativeLayout
        android:background="#CCC"
        android:id="@+id/layout"
        android:onClick="myClick"
        android:layout_width="200dp"
        android:layout_height="200dp">
        <View
            android:clickable="true"
            android:layout_width="200dp"
            android:layout_height="200dp" />
    </RelativeLayout>
    

    解说

    • RelativeLayoutmyClick不会触发,因为View设置为clickable而被消耗了。
    • 不论View自身是否注册点击事件,只要View是可点击的就会消费事件。
    • 事件是否被消费由返回值决定,true表示消费,false表示不消费,与是否使用了事件无关。

    注意事项

    • 只要接受ACTION_DOWN就意味着接受所有的事件,拒绝ACTION_DOWN则不会收到后续内容。
    • 如果当前正在处理的事件被上层View拦截,会收到一个ACTION_CANCEL,后续事件不会再传递过来。

    相关文章

      网友评论

          本文标题:★60.自定义控件 ★18.事件分发机制详解

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