package com.trs.v7.home.view;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
* <pre>
* Created by zhuguohui
* Date: 2023/4/19
* Time: 15:42
* Desc:用于解决水平滚动的滑动冲突问题
* </pre>
*/
public class HorizontalScrollViewParent extends FrameLayout {
HorizontalScrollView hsv;
private float dx;
private float dy;
private int touchSlop;
public HorizontalScrollViewParent(@NonNull Context context) {
super(context);
}
public HorizontalScrollViewParent(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
dx = ev.getRawX();
dy = ev.getRawY();
return false;
case MotionEvent.ACTION_MOVE:
float mx = ev.getRawX() - dx;
float my = ev.getRawY() - dy;
if(Math.abs(mx)>touchSlop||Math.abs(my)>touchSlop){
if(Math.abs(mx)>Math.abs(my)){
//横向滚动
boolean canScroll = hsv.canScrollHorizontally((int) -mx);
return !canScroll;
}
}
break;
case MotionEvent.ACTION_UP:
return false;
}
return false;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
hsv= (HorizontalScrollView) getChildAt(0);
}
}
使用直接在xml中使用,包裹在HorizontalScrollView外面即可。