NestedScrollView嵌套recyclerview,item第一次点击事件失效,大家应该遇到过这个问题,查了好久相关文章,都不好用.
最终,自定义ScrollView得以解决!
直接上源码
package com.pactera.dongfeng.view; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.widget.NestedScrollView; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewConfiguration; /** * @Description: java类作用描述 * @Author: 大魔王老杨 * @Date: 2020-07-30 10:54 */ public class MineScrollView extends NestedScrollView { private int downY; private int mTouchSlop; private ScrollInterface scrollInterface; public MineScrollView(@NonNull Context context) { super(context); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MineScrollView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MineScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } @Override//事件拦截 public boolean onInterceptTouchEvent(MotionEvent e) { int action = e.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downY = (int) e.getRawY(); break; case MotionEvent.ACTION_MOVE: int moveY = (int) e.getRawY(); if (Math.abs(moveY - downY) > mTouchSlop) {//判定为滑动 return true;//返回true为拦截,父view消费滑动事件 } } return super.onInterceptTouchEvent(e); } /*定义滑动接口*/ public interface ScrollInterface{ void onScrollChange(int scrollX, int scrollY, int oldScrollX, int oldScrollY); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { if (scrollInterface != null) { scrollInterface.onScrollChange(l, t, oldl, oldt); } super.onScrollChanged(l, t, oldl, oldt); } public void setOnScrollChangeListener(ScrollInterface t) { this.scrollInterface = t; } }