简单、易懂的解决滑动冲突

概述

滑动冲突我想大家在日常开发中会经常遇到,要解决滑动冲突其实没有那么难,好多人在听到”View的滑动冲突”这句话的时候就槽*了,突然脑子一片空白。
所以我写了这篇博文来帮大家很容易的解决这个问题,在这篇博文中我们不提源码、不提View的事件分发机制,直接给出可以解决绝大部份滑动冲突的代码。

常见的冲突场景
  • A控件与B控件同向滑动(A为父控件,B为子控件)
    思路:即然两个控件都可以滑动,都在抢这个滑动事件,而且很显然A做为父控件那么这个滑动事件被它优先抢到,所以当我们想让B响应时A还是把这个事件给拦截了,所以在我们想让B响应时应该通知A不要拦截。

解决方案

重写B控件中的dispatchTouchEvent()方法,如果有了解View的事件分发机制的朋友应该知道,不知道的也不要在意,照着写就行。
在重写dispatchTouchEvent()我们可以拿到View的MotionEvent。

用MotionEvent来判断用户的操作,从而来判断是否让A(父控件)来拦截。
是否拦截就是一句代码:getParent().requestDisallowInterceptTouchEvent(true);

public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // 在手按下(触摸)屏幕的那一刻
            /**
            在这里写下你的逻辑判断,然后调用requestDisallowInterceptTouchEvent来是否拦截。
            ev可以拿到用户在屏幕上操作的各种数据,不了解同学可以去学习一下MotionEvent,这里就不多说了。
            */
            // true:请求不拦截
            // false:请求拦截
            getParent().requestDisallowInterceptTouchEvent(true);
            break;
        case MotionEvent.ACTION_MOVE:
            // 移动的时候
            break;
        case MotionEvent.ACTION_UP:
            // 抬起的时候
            break;
        default:
            break;
        }
        return super.dispatchTouchEvent(ev);
    }

第一次写博文可能有很多不足的地方,知识也讲得不够细,如果大家看了之后有什么疑问可以联系我,而且后面也会进行修改和更新,以后写出更好的博文来分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值