一、問題描述
今天遇到了一個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;
}
});