实现两个RecyclerView联动(左侧固定一栏,右侧可左右滑动)

最近开发遇到的一个需求。展示篮球队员的各种数据,左侧一栏是球员的名字。右边是各种各样的数据,包括赛季三分球,篮板,抢断,得分,失误。然后三分球二分球罚篮命中率等。有七八项之多。我心想这啥需求啊。左边固定,右边还可以滑动。然后滑动右侧或者左侧,另外的要跟着动,毕竟是球员与球员数据对应。WTF。

《实现两个RecyclerView联动(左侧固定一栏,右侧可左右滑动)》 {_~6X`YGI44LJCFT(}AE(J2.png

可能大家一看也跟我一样。觉得很复杂,一个跟着一个动,流畅性怎么样。然后右边的左右滑动又该如何实现呢。
别着急,我已经帮大家踩好了坑。虽然大多数开发中很少有这样的页面展示需求。这里记录下,希望有同样需求的有所帮助。毕竟我当时百度是没有百度到这种需求的。

一、写左右两个RecyclerView

左侧recyclerView的Item布局就是一个TextView展示球员名字。右侧的recyclerView的item。因为比较长。所以,每一个item必须指定宽度dp。比如每个50dp、用权重的话整个item会被压缩在屏幕里。而无法左右滑动。这个比较好理解。

二、将第二个RecyclerView包在HorizontalScrollView中。

将RecyclerView包在HorizontalScrollView中。这样就可以左右滑动了。贴下布局代码

      <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal"
                        android:paddingBottom="10dp"
                        >
                        <LinearLayout
                            android:layout_width="80dp"
                            android:layout_height="wrap_content">
                            <android.support.v7.widget.RecyclerView
                                android:id="@+id/foot_info_water_left_recycler"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                />

                        </LinearLayout>
                        <HorizontalScrollView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:scrollbars="none" //去掉滚动条
                            >
                            <android.support.v7.widget.RecyclerView
                                android:id="@+id/foot_info_water_right_recycler"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                />
                        </HorizontalScrollView>
                    </LinearLayout>

三、让左右RecyclerView进行联动

我们发现现在滑动我们的recyclerView是左右两侧并没有跟着滑动的。有的同学可能想分别监听左右两侧的滑动距离。然后再动态设置给左右两侧。这样也不是不可以。之前做别的需求的时候,那时候还是用listview,尝试过。滑动的时候超级不流畅。已经到了卡顿的地步。
其实想让左右两侧跟着动超级简单。用NestedScrollView(V4包系统自带)包一下上面的布局,就可以了。就这么简单。

四、最后的优化

进行完上面的步骤我们的左右两侧已经跟着滑动了。但是会超级不流畅。一划只能滑动几个item。没有filing。这是因为我们的recyclerview跟nestedScrollView都进行了滑动计算。那么让recycle人View不进行滑动计算。让滑动全有scrollView来接受。就会变得流畅了。代码里设置

mRightRecyclerView.setNestedScrollingEnabled(false); 

如果我们的布局最外层是SwipeRefreshLayout的话。会跟ScrollView有冲突。进行一下Scroll是否滑动到顶部的判断即可。


        mScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if(mScrollView.getScrollY()==0){
                    mRefreshLayout.setEnabled(true);
                }else {
                    mRefreshLayout.setEnabled(false);
                }
            }
        });

总结

总的来说,还是RecycleView强大。暴露出的超级多的方法。可以高度定制。 有兴趣的可以看下源码。之前在 泡在网上的日子 看的源码解析还不错。

大家可以关注下我的微信公众号。dongyun_android

以后有了新的内容会分享给大家。一起提高。
扫码关注。

《实现两个RecyclerView联动(左侧固定一栏,右侧可左右滑动)》 image.png

谢谢大家的阅读。

    原文作者:Android小马哥
    原文地址: https://www.jianshu.com/p/ca435cdbea62
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞