Android ScrollView嵌套子View时的滑动冲突问题

一、问题描述

今天遇到了一个view冲突,一个颜色选择器放在了一个ScrollView下面,导致滑动冲突,

二、问题分析

这里就需要我们对view的事件分发有一些了解

  1. dispatchTouchEvent:负责事件的分发
  2. onInterceptTouchEvent:判断是否拦截某个事件
  3. onTouchEvent:消费点击事件

三、问题解决

这里涉及到一个方法,例如我们在ACTION_DOWN事件中加上 getParent().requestDisallowInterceptTouchEvent(true),表示在DOWN的时候屏蔽父类的事件屏蔽

所以经过下面两个步骤即可解决冲突问题。

1.当父类布局滑动时,父类拦截事件,子类布局.getParent().requestDisallowInterceptTouchEvent(true);

2.当子类布局滑动时,父类不拦截事件,子类布局.getParent().requestDisallowInterceptTouchEvent(true);
 

       // 解决scrollview和子view滑动冲突问题
        binding.ratundityFl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                binding.rgbInsideIv.getParent().requestDisallowInterceptTouchEvent(false);
                return false;
            }
        });
        binding.rgbInsideIv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                binding.rgbInsideIv.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });

 

你可能感兴趣的:(Android)