Android Event事件分发(新版本)

之前写过一个方案(添加链接描述),突然觉得很麻烦,于是有了新的方案:

首先先说要解决的问题: 当父布局能滑动,子View也能滑动,就会出现滑动冲突

解决思路:我们按下子View时,设置父布局不监听滑动事件,抬起子View时设置父布局继续监听滑动事件
比上一篇优点在哪:上一篇需要操作父类对象,很麻烦,这一篇可以直接在子View中完成任务。

第一步:在子View中添加这个方法

/**
* 设置父类监听或者不要监听触摸事件
 * 说明:这是一个简单粗暴的方法,请求所有的父布局全部监听或者全部不要监听触摸事件
* @param isDisallowInterceptTouchEvent
*/
public void requestParent(boolean isDisallowInterceptTouchEvent){
    ViewGroup parent=null;
    for (int k=0;k<15;k++){ //15代表你布局嵌套的层数,具体看你的布局复杂程度
        try {
            if (parent==null){
                parent = (ViewGroup) getParent();
                if (parent!=null){
                    parent.requestDisallowInterceptTouchEvent(isDisallowInterceptTouchEvent);
                }
            }else {
                parent = (ViewGroup) parent.getParent();
                if (parent!=null){
                    parent.requestDisallowInterceptTouchEvent(isDisallowInterceptTouchEvent);
                }
            }
        }catch (Exception e){

        }
    }
}

第一步:在子View的onTouchEvent中发出请求

 @Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction()==MotionEvent.ACTION_DOWN){
        requestParent(true);
        return true;
    }

    if (event.getAction()==MotionEvent.ACTION_UP) {
        requestParent(false);
    }
    return super.onTouchEvent(event);
}

此时,滑动子View时,就不会再收到父布局的影响了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝命三郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值