1.滚动不流畅
nNestedScrollView嵌套垂直recyclerview 滚动不流畅
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:nestedScrollingEnabled="false"/>
2.nNestedScrollView嵌套水平recyclerview 滚动冲突
/** * 解决嵌套水平recyclerview滑动冲突 * @author DEV-81 * @version 1.0 */ public class MyNestedScrollView extends NestedScrollView { private int slop; private float mInitialMotionX; private float mInitialMotionY; public MyNestedScrollView(Context context) { super(context); init(context); } private void init(Context context) { ViewConfiguration config = ViewConfiguration.get(context); slop = config.getScaledEdgeSlop(); } public MyNestedScrollView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public MyNestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private float xDistance, yDistance, lastX, lastY; @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final float x = ev.getX(); final float y = ev.getY(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; lastX = ev.getX(); lastY = ev.getY(); // This is very important line that fixes computeScroll(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - lastX); yDistance += Math.abs(curY - lastY); lastX = curX; lastY = curY; if (xDistance > yDistance) { return false; } } return super.onInterceptTouchEvent(ev); } }