一、问题描述
今天遇到了一个view冲突,一个颜色选择器放在了一个ScrollView下面,导致滑动冲突,
二、问题分析
这里就需要我们对view的事件分发有一些了解
- dispatchTouchEvent:负责事件的分发
- onInterceptTouchEvent:判断是否拦截某个事件
- 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;
}
});