我用半个小时做总结
昨天下午5店发现这个问题,就在刚刚才解决。 解决办法很简单,而且从昨天到现在 在我眼前飘了不少于10次才被我识别出它的强大
需求描述:
首页是一个很长的内容丰满的页面, 里面有两个卡片,此二卡片有个列表可展开,列表展开后卡片铺满一页,重点是,当卡片展开后,此首页就只有一个卡片无其他了,更别提滚动了。但是不能简简单单将其他内容VIew.Gone掉,因为,展开是动画,是缓慢的动作,是上下慢慢展开,是其他挤出页面的视觉效果,而且卡片收缩的时候,也是慢慢收缩,其他内容慢慢回到页面的过程。
问题:
那么,卡片展开的同时,首页的scrollView不能滚动。
问题解决:
1.第一阶段自然想到的是事件拦截,scrollView事件直接不处理就好了,这很简单
onInterceptTouchEvent 返回 false
onTouchEvent 返回 false.第一阶段自然想到的是事件拦截,scrollView事件直接不处理就好了,这很简单
此时scrollView的滚动是不进行了,被展开的卡片除了RecyclerView 可滚动外,其余就根本不会触发滚动,就真的像是一页只有一个卡片一样,可是RecyclerView滑到边界时候,如果用尽滑动RecyclerView,会带动scrollView滚动。。。。。scrollView滚动不是屏蔽了吗,scrollView 的scrollChange也没有触发呀~~~
打断点查看RecyclerView的滑动调用 调用之前会先调用父类,查看父类是否滑动 即dispatchNestedPreScroll()返回false,滑动之后调用父类查看是否调用,即:dispatchNestedScroll()也是返回false,这奇怪的问题
2 其实到这部可以确定和NestedScroll滚动有关,
//返回true代表父view消耗滑动速度,子View将不会滑动 @Override public boolean onNestedPreFling(View target, float velocityX, float velocityY) { if (null == mRecyclerView) mRecyclerView = (RecyclerView) target; return false; } //对应子view 的dispatchNestedPreScroll方法, 最后一个数组代表消耗的滚动量,下标0代表x轴,下标1代表y轴 @Override public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { //判断是否滚动到最大值 if (null == mRecyclerView) mRecyclerView = (RecyclerView) target; //计算RecyclerView的偏移量, 等于0的时候说明recyclerView没有滑动,否则应该交给recyclerView自己处理 if (mRecyclerView.computeVerticalScrollOffset() != 0) return; this.smoothScrollBy(dx, dy); consumed[1] = dy; //consumed[1]赋值为 dy ,代表父类已经消耗了改滚动。 }
这两个方法看着和父类子类滚动有关,重写之后依然没有任何效果
3 。继续查看发现一片文章
触摸到RecyclerView的时候滑动还有些粘连的感觉,只需要在代码中设置
mRecyclerView.setNestedScrollingEnabled(false);
对呀,在滑动recyclerView时候,外部滑动,是黏连效应呀,可以试试 果然OK了。。
那么这个方法是什么意思呢 ,查看此参数调用的地方,发现很多地方都是吧isNestedScrollingenable 参数和mNestedScrollingParent同时使用判断,因为父类我们之前已经屏蔽掉了,所以只需查看单纯判断isNestedScrollingenable的地方 只有一个 与startNestedScroll 有关:
startNestedScroll 方法如果返回ture则说明有一个与嵌套滑动合作的父类,但是我们想要的是false,即不让嵌套RecyclerView的滚动影响到ScrollView .所以设置为false就OK了
重要知识点:
Child 滑动开始的调用 startNestedScroll(),Parent 收到 onStartNestedScroll() 回调,决定是否需要配合 Child 一起进行处理滑动,如果需要配合,还会回调onNestedScrollAccepted()。
参考文章:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0822/3342.html
http://www.jianshu.com/p/791c0a4acc1c