Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?

Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?

转自:Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?

在Android中的View触摸事件处理主要涉及以下三个方法

  • dispatchTouchEvent()
  • onInterceptTouchEvent()
  • onTouchEvent()

View的触摸事件传递,从前到后按照以下顺序

  1. Activity
  2. PhoneWindow
  3. DecorView
  4. 子View

他们之间的关系如下

  • 当触摸事件来临时,dispatchTouchEvent()会被调用,它的返回值由onInterceptTouchEvent()和child.dispatchTouchEvent()共同决定
  • 在dispatchTouchEvent()中,onInterceptTouchEvent()会被调用,onInterceptTouchEvent()决定的是当前ViewGroup是否对触摸事件进行拦截,如果返回true,则触摸事件由当前ViewGroup的onTouchEvent()处理,否则触摸事件会被分发到子View,由子View进行处理。
  • onTouchEvent()中对具体的触摸事件进行处理。

他们之间的关系可以用伪代码标示,如下:

public boolean dispatchTouchEvent(MotionEvent ev) {
    boolean consume = false;
    if (onInterceptTouchEvent(ev)) {
        consume = onTouchEvent(ev);
    } else {
        consume = child.dispatchTouchEvent(ev);
    }
    return consume;
}

另外,ViewGroup.onInterceptTouchEvent()默认返回false,即对触摸事件不进行拦截,都会分发到子View。

如果View设置了onTouchListener(),则onTouchListener()的处理在onTouchEvent()之前,如果onTouchListener()返回true,则View.onTouchEvent()不会被调用,即onTouchListener()的优先权高于onTouchEvent()

Android中默认认为View是消耗onTouchEvent()的,即返回值为true,除非它是不可点击的,即clickable和longClickable都为false。

更多参考资料

  • Android开发艺术探索-第三章 View的事件体系
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值