美文网首页
★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