双重ScrollView,RecyclerView联动实例_weixin_33775572的博客-程序员秘密

技术标签: 移动开发  

 

最近收到一个需求,如图,大家一看,不就是一个简单的表格吗,RecyclerView就搞定了

我一开始也是这么想的,但是当我继续听下去

需求是左边党支部栏目只能上下滑动,之后联动右边下方表格一起上下滑动,右边下方表格滑动,左边下方表格依然如此

然后右边上方只能左右滑动,之后联动右边下方表格一起左右滑动,右下方滑动,右上同样一起滑动

然后此时我的内心是崩溃的

收集几个关键点吧

1:右下方部分既能左右滑动,又可以上下滑动

2:左上角就是一个TextView,不动

3:需要对RecyclerView进行联动

4:ListView应该也可以实现,但是我使用了扩展性更好的RecyclerView

5:RecyclerView不可以既左右滑动,又上下滑动,即他只能支持一个方向

所以基本有思路了

RecyclerView放在ScrollView容器内,上下滑动做RecyclerView联动

左右滑动做ScrollView联动

下面看xml layout代码吧

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_height="40dp">

        <LinearLayout
            android:gravity="center"
            android:layout_width="120dp"
            android:background="@color/gray_trans"
            android:layout_height="match_parent">

            <TextView
                android:layout_marginStart="16dp"
                android:layout_marginEnd="16dp"
                android:text="党支部"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </LinearLayout>

        <demo.MyScrollView
            android:id="@+id/scrollView_right_up"
            android:layout_width="match_parent"
            android:scrollbars="none"
            android:layout_height="wrap_content">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <demo.MyRecyclerView
                    android:id="@+id/recyclerview_right_up"
                    android:layout_width="match_parent"
                    android:layout_height="40dp">

                </demo.MyRecyclerView>

            </RelativeLayout>

        </demo.MyScrollView>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview_left_bottom"
            android:layout_width="119dp"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>

        <View
            android:background="@color/gray_trans"
            android:layout_width="1dp"
            android:layout_height="match_parent"/>


        <demo.MyScrollView
            android:id="@+id/scrollView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <demo.MyRecyclerView
                    android:id="@+id/recyclerview_right_bottom"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"

                    >
                </demo.MyRecyclerView>

            </RelativeLayout>

        </demo.MyScrollView>

    </LinearLayout>

</LinearLayout>

其中MyScrollView是重写的暴露了onScrollChanged 方法,之后我们可以setOnScrollListener对其滑动进行监听

MyRecyclerView重写以及为什么要套一层RelativeLayout请看我上一篇文章解释

 然后放出关键的联动滑动代码吧

   public void setOnScrollLowSdk(){

        recyclerViewLeftBottom.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                if(recyclerView.getScrollState()!= RecyclerView.SCROLL_STATE_IDLE){
                    recyclerViewRightBottom.scrollBy(dx, dy);
                }
            }
        });

        recyclerViewRightBottom.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                if(recyclerView.getScrollState()!= RecyclerView.SCROLL_STATE_IDLE){

                    recyclerViewLeftBottom.scrollBy(dx,dy);
                }
            }
        });

        scrollViewRB.setOnScrollListener(new MyScrollView.OnScrollListener() {
            @Override
            public void onScroll(int scorllX, int scrollY, int oldX, int oldY) {

                scrollViewRU.scrollTo(scorllX,scrollY);
            }
        });

        scrollViewRU.setOnScrollListener(new MyScrollView.OnScrollListener() {
            @Override
            public void onScroll(int scorllX, int scrollY, int oldX, int oldY) {
                scrollViewRB.scrollTo(scorllX,scrollY);
            }
        });

    }

命名的话应该可以看懂RU代表RightUp右上方,RB代表RightBottom右下方

至此就可以了,省去了RecyclerView数据填充以及各种的LayoutManager初始化,这个也不难

就搞定了

 

 

转载于:https://www.cnblogs.com/fengfenghuifei/p/10602583.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33775572/article/details/93846531

智能推荐

java27种设计模式,java23种设计模式——四、原型模式_茶话股经的博客-程序员秘密

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。举个例子,就是当我们需要给电脑安装win10系统时需要去官网上下载win10系统的安装包。而安装包的大小都是很耗时的,还需要另一台电脑来操作。如果...

navicate mysql 导入表sql文件,报错情况 之 编码格式 Err] 1064 - You have an error in your SQL syntax; check the manu_violent_sunset的博客-程序员秘密

1 问题:navicate执行sql脚本部分数据报错...(语句没问题:导出表)[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' INSERT i...

《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的..._weixin_34153893的博客-程序员秘密

概述执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模...

Linux 内核态和用户态的交互---netlink_linux内核态和用户态数据交换_Z_man的博客-程序员秘密

作者:Kendo2006-9-3这是一篇学习笔记,主要是对《Linux 系统内核空间与用户空间通信的实现与分析》中的源码imp2的分析。其中的源码,可以到以下URL下载:http://www-128.ibm.com/developerworks/cn/linux/l-netlink/imp2.tar.gz[size=3]参考文档[/size]《Linux 系统内核空间与

利用Lucene与Nutch构建简单的全文搜索引擎_weixin_34050389的博客-程序员秘密

文章地址 1.简介 本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能。由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文档处理的功能,因此在这一部分利用到了Heritrix和HTMLParser这两个工具分别实现爬虫与HTML文档解析的功能。而使用Nutch的时候只需要一些简单的配置和安装就可以直接运行...

ppt编写一个抽奖系统_ppt抽奖代码_Tertiary_grass的博客-程序员秘密

本文是用ppt制作一个抽奖系统,点击开始抽取时,屏幕会随机滚动数字,点击停止滚动即显示抽取到的数字。一、制作过程第一步:打开ppt(我用的是wps)第二步:点开“开发工具”如下图:第三步:在控件区选择按钮控件和标签控件:第四步:生成如下图的样式:第五步:右击左下角的按钮控件出现如下,点击属性,出现下图。

随便推点

浅析 Hadoop 中的数据倾斜_天边tbdp的博客-程序员秘密

最近几次被问到关于数据倾斜的问题,这里找了些资料也结合一些自己的理解.     在并行计算中我们总希望分配的每一个task 都能以差不多的粒度来切分并且完成时间相差不大,但是集群中可能硬件不同,应用的类型不同和切分的数据大小不一致总会导致有部分任务极大的拖慢了整个任务的完成时间,硬件不同就不说了,应用的类型不同其中就比如page rank 或者data mining 里面一些计

Raspberry Pi - Robot Arm_hhhliuye的博客-程序员秘密

Raspberry Pi - Robot Arm1. Robot Configuration1.1 Configure PCA96851.2 servokit libControlProject and Code1. Robot Configuration1 * Raspberry Pi processor.4 * SG90 servos.1 * PCA9685.1 * 5V(2A/4A) adaptor.3D printed arm model.1.1 Conf

2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势_国外数控龙门铣床发展现状_QYR行业报告的博客-程序员秘密

数控龙门镗铣床是新系列组合铣床,工作台采用1XG系列,铣削头采用1TX系列。其主传动为斜齿轮传动,传动平稳,进给传动采用滚珠丝杠传动。 数控龙门镗铣床的主要特点是刚性好、精度高、效率高,配以适当的铣刀盘每分钟走刀量可达800mm。2020年,全球数控龙门镗铣床市场规模达到了 亿元,预计2027年将达到 亿元,年复合增长率(CAGR)为 %。本报告研究全球与中国市场数控龙门镗铣床的产能、产量、销量、销售额、价格及未来趋势。重点分析全球与中国市场的主要厂商产品特点、产品规格、价格、销量、销售收入及全球和..

linux 静态库.a编译_如何在Linux上制作静态库(.a)_cuma2369的博客-程序员秘密

linux 静态库.a编译How to make a static library (.a) on Linux? 如何在Linux上制作静态库 (.a)? How to generate a library from C programs in files lib1.c and lib2.c: 如何从C程序在文件 lib1.c和lib2.c中生成库: $ gcc -c lib1.c lib2....

下一个十年计划,兼谈上十年的总结_aibo110110的博客-程序员秘密

新的一年了,当然优先要看看同行们的其计划,学习一下它人的先进经验。 总体规划:投资-技术-生活-学习-输出。 为什么不是2014年的计划?因为到了现在这个时刻,一年的计划没有办法干想干的事情。比如投资,这也不是一年就能搞成的。资金的积累没有这么快,也很难把握住市场能提供的机会。 下面总结一下过去的经验: 10年以来,乱七八糟的事情经历不少,...

『算法』『数据结构』 浅谈贪心算法,理解程序员必懂必会的计算机常见算法——贪心算法__LanXiu的博客-程序员秘密

文章目录基本认识基本思想与原理适用的问题求解的步骤与模板引例部分实战部分趁热打铁 刷题练习部分(持续更新)基本认识贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解。基本思想与原理贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,...

推荐文章

热门文章

相关标签