写点什么

自定义 ViewGroup 的触摸反馈

用户头像
Changing Lin
关注
发布于: 刚刚
自定义ViewGroup的触摸反馈

1.知识点

  • slop:溢出,表示超出界限才认为越界

  • onInterceptTouchEvent:是否拦截事件,仅 ViewGroup 具有该方法;View 不具备该方法;

  • dispatchTouchEvent:View 和 ViewGroup 所做的该方法不同

  • TouchTargets:触发目标、触发对象、多点触摸,

2.触摸反馈的流程

  • Activity.dispatchTouchEvent()

  • 递归:ViewGroup(View).dispatchTouchEvent()

  • ViewGroup.onInterceptTouchEvent()

  • child.dispatchTouchEvent()

  • super.dispatchTouchEvent()

  • View.onTouchEvent()

  • Activity.onTouchEvent()

3.事件分发机制

  • 对于一个根 ViewGroup 来说,发生点击事件首先调用 dispatchTouchEvent

  • 如果这个 ViewGroup 的 onIterceptTouchEvent 返回 true 就表示它要拦截当前事件,接着这个 ViewGroup 的 onTouchEvent 就会被调用.如果 onIterceptTouchEvent 返回 false,那么就会继续向下调用子 View 的 dispatchTouchEvent 方法

  • 当一个 View 需要处理事件的时候,如果它没有设置 onTouchListener,那么直接调用 onTouchEvent.如果设置了 Listenter 那么就要看 Listener 的 onTouch 方法返回值.为 true 就不调,为 false 就调 onTouchEvent

  • View 的默认实现会在 onTouchEvent 里面把 touch 事件解析成 Click 之类的事件

  • 点击事件传递顺序 Activity -> Window -> View

  • 一旦一个元素拦截了某事件,那么一个事件序列里面后续的 Move,Down 事件都会交给它处理.并且它的 onInterceptTouchEvent 不会再调用

  • View 的 onTouchEvent 默认都会消耗事件,除非它的 clickable 和 longClickable 都是 false(不可点击),但是 enable 属性不会影响

发布于: 刚刚阅读数: 2
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
自定义ViewGroup的触摸反馈