对于ACTION_CANCEL理解

ACTION_CANCEL事件在Android中表示当前手势已被中止,类似UP事件但不执行常规操作。此事件在控件的前驱事件被父控件拦截时触发,会传递给子控件。尽管在onInterceptTouchEvent中拦截CANCEL无效,它仍会传递给子控件,意味着手势结束。通常可以像处理UP事件一样处理CANCEL,但在特定情况下需特别处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度翻译

当前手势已中止。您将不会收到任何更多的点。你应该把它当作一个UP事件,但不执行任何你通常会。

我的理解

这玩意就是和up一个意思,可以直接当做up事件使用

何时触发该事件

当控件收到前驱事件(什么叫前驱事件?一个从DOWN一直到UP的所有事件组合称为完整的手势,中间的任意一次事件对于下一个事件而言就是它的前驱事件)之后,后面的事件如果被父控件拦截,那么当前控件就会收到一个CANCEL事件,并且把这个事件会传递给它的子事件。(注意:这里如果在控件的onInterceptTouchEvent中拦截掉CANCEL事件是无效的,它仍然会把这个事件传给它的子控件)之后这个手势所有的事件将全部拦截,也就是说这个事件对于当前控件和它的子控件而言已经结束了。

简单来说就是他不是一个完整的手势响应 例如 子控件只是响应了down 而父控件把子控件的up事件拦截了 这个时候就会触发cancel事件 来区分up事件(儿子自己收到微信妈妈要给他一个苹果down,老爹给拦截了

onInterceptTouchEvent返回false,儿子哭了cancel)

使用跟up一样使用即可,特殊情况特殊处理

实例代码

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_UP:
            return true;
 case MotionEvent.ACTION_CANCEL:
            return true;
 }
    return super.onInterceptTouchEvent(ev);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值