Android 中的 onInterceptTouchEvent() 和 onTouchEvent()

onInterceptTouchEvent()

public boolean onInterceptTouchEvent (MotionEvent ev)

onInterceptTouchEvent()是ViewGroup的方法。他主要用于处理触摸事件并改变事件的传递方向。

参数

MotionEvent ev:
常见的动作常量:

内容解释
public static final int ACTION_DOWN= 0单点触摸动作,即有个手指触摸到了屏幕上
public static final int ACTION_UP= 1单点触摸离开动作,即触摸到屏幕的手指(只有一个)离开
public static final int ACTION_MOVE= 2触摸点移动动作,即有一个手指在屏幕上滑动
public static final int ACTION_CANCEL= 3触摸动作取消
public static final int ACTION_OUTSIDE= 4触摸动作超出边界
public static final int ACTION_POINTER_DOWN= 5多点触摸动作,即有了第二个手指或者更多的手指放到了屏幕上
public static final int ACTION_POINTER_UP= 6多点离开动作,即有一个手指离开了屏幕,但屏幕上至少还有一个手指


注意事项:move事件,up事件,cancel事件发生的前提是一定发生了action_down事件,若没有消费action_down事件,则action_move,action_up等事件都不会被捕获。

返回值

onInterceptTouchEvent()的返回值为boolean型,当返回值为true时,表示事件会在当前的ViewGroup中处理,并截断事件使得事件不往下传递。同时把事件传递给当前的控件的onTouchEvent()去处理。


onTouchEvent()

public boolean onTouchEvent (MotionEvent ev)

参数

参数和onInterceptTouchEvent()相同,此处不做赘述

返回值

onTouchEvent是View的方法,ViewGroup继承View,所以也能使用该方法。他和onInterceptTouchEvent()有些相似,都是处理触摸事件并改变事件的传递方向。我们在这里着重对比onTouchEvent和onInterceptTouchEvent的不同点:

  • 传递方向不同:
    • onInterceptTouchEvent() 根据返回值不同将事件传递给子控件的dispatchTouchEvent()或者当前控件的onTouchEvent().当onInterceptTouchEvent()返回true时,表示当前控件要拦截并消费掉这个事件,即将事件传递给当前控件的onTouchEvent()去处理。当反悔false时,表示当前控件将事件交给子控件处理,由子控件的dispatchTouchEvent()接收。
    • onTouchEvent()根据返回值不同将事件传递给父控件或者自己消费掉。当返回值为true时,表示这个事件要被当前控件消费掉,事件传递中止。当返回值为false时,表示这个事件会传递给父控件,由父控件的onTouchEvent()接收。
  • 数据来源不同:
    • onInterceptTouchEvent()接收到的事件是当前控件的dispatchTouchEvent()分配的。
    • onTouchEvent()接收到的事件是当前控件的onInterceptTouchEvent()传递过来的(当onInterceptTouchEvent的返回值是true时)或者子控件的onTouchEvent()传递过来(当子控件的onTouchEvent返回值为false时)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值