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时,就不会再收到父布局的影响了。

你可能感兴趣的:(Android代码块总结,android,java)