父 RecyclerView 拾取原本用于嵌套 RecyclerView 的手势

use*_*392 5 android horizontal-scrolling carousel android-recyclerview

我有一个垂直RecyclerView和一个嵌套的水平RecyclerView作为其子项之一。内部视图用作带有PagerSnapHelper. 当我尝试水平滚动内部视图时,我的行为不太理想。有时,即使我的意图是水平滚动内部视图,父视图也会拾取手势并垂直滚动。有没有办法配置默认滚动检测器,使水平滚动更平滑?

Rin*_*nov 4

您可以尝试将其与家长RecyclerView一起使用吗:overriden methodRecyclerView

public class CustomRecyclerView extends RecyclerView {

    private int mTouchSlop;
    private float mPrevX;

    public CustomRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        switch (e.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPrevX = MotionEvent.obtain(e).getX();
                break;

            case MotionEvent.ACTION_MOVE:
                final float eventX = e.getX();
                float xDiff = Math.abs(eventX - mPrevX);

                if (xDiff > mTouchSlop) {
                    return false;
                }
        }

        return super.onInterceptTouchEvent(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

xml 中的示例

<com.example.stackoverflow.CustomRecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
Run Code Online (Sandbox Code Playgroud)