最近收到一个需求,如图,大家一看,不就是一个简单的表格吗,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初始化,这个也不难

就搞定了

双重ScrollView,RecyclerView联动实例的更多相关文章

  1. Android实现两个ScrollView互相联动,同步滚动的效果

    公众号:smart_android 作者:loonggg 点击"阅读原文",可查看更多内容和干货 最近在做一个项目,用到了两个ScrollView互相联动的效果,简单来说联动效果意 ...

  2. RecyclerView联动滑动失败

    RecyclerView联动滑动失败 我们在做Recyclerview联动滑动的时候,就是左边一个RecyclerView右边一个RecyclerView 我们希望左边的RecyclerView可以和 ...

  3. “京东金融”主页效果 RecyclerView联动

    先上效果图吧: 第一个想到的实现方式是上面使用horizontalScrollview,下面使用Viewpager,经过尝试之后发现二者API有限,不能达到理想效果.几经折腾,最后上下都使用了自定义的 ...

  4. android开发学习 ------- RecyclerView多类型实例

    实现RecyclerView多类型的实例:效果如下图所示 public class CarFragment extends Fragment{ private View view; private R ...

  5. Django(二十)下拉列表-省市联动实例:jquery的ajax处理前端

    一.知识点 1.jquery的ajax请求写法 <script src="/static/js/jquery-1.12.4.min.js"></script> ...

  6. JS三级联动实例

    简单的HTML实例: <h4>选择省</h4> <div class="selectSheng"></div> <select ...

  7. scroll-view组件bindscroll实例应用:自定义滚动条

    我们知道scroll-view组件作为滑动控件非常好用,而有时候我们想放置一个跟随滚动位置来跟进的滚动条,但又不想用滚动条api该怎么办呢?(当然是自己写一个呗还能怎么办[自黑冷漠脸])嗯,没错.自己 ...

  8. js省市二级联动实例

    //动态创建省市二级联动<!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  9. vue2.0+mint-ui资讯类顶导航和内容页联动实例(不是很完美)

    <template> <div> <div class="navbox"> <div class="nav"> ...

随机推荐

  1. eclipse 没有web项目和server

    New项目中没有web Window菜单的preference没有server 解决方法:打开help->Install new software… 在work with中找到http://do ...

  2. Nodejs使用robot操作鼠标键盘

    1.安装robotjs库 前提是配置了cnpm cnpm i robotjs -g   2.如果报错VCBuild.exe,如下可以安装windows-tool MSBUILD : error MSB ...

  3. Python文件操作中的方法:.write()换行

    active =Truewhile active: message =input("\nPlease input your name:\n") if message =='q': ...

  4. 【转载】pycharm破解,可使用到2099年.pycharm版本 pycharm-professional-2016.3.1

    1. Pycharm的安装方法,论坛很多,这里就不赘述了.参照:http://blog.csdn.net/qq_29883591/article/details/52664478 2. 下载Pycha ...

  5. Net Core API网关Ocelot

    Ocelot在github的地址 https://github.com/TomPallister/Ocelot , 非常给力的是在课程当天完成了.NET Core 2.0的升级,升级过程请看https ...

  6. 对于react中rredux的理解

    1.什么是redux? redux是一个应用数据流框架,主要作用是对于应用状态的管理 2.reducer特点 : (1)默认的state (2)state是只可读不可修改 (3)必须返回一个纯函数 3 ...

  7. 服务器怎么安装mysql数据库

    有些小伙伴们想自己玩玩服务器.可以买了服务以后,发现服务器就是一个大框子,没有数据存储.啥都没有,这时候就需要各种软件操作来逐步安装这些东西, 一.使用的工具:xshell(从官网上下载),目的是得使 ...

  8. node.js浅见

    看过很多朋友node.js代码敲得很好,但是对于概念还是很生疏.个人认为,代码是树叶,树干搭起来才是王道. 1.简述node.js的适用场景: IIO密集而非计算密集的情景:高并发微数据(比如账号系统 ...

  9. 【awk】用awk将Fasta文件序列变成一行

    awk: awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" &q ...

  10. 文件和IO流

    摘要:本文主要介绍了Java的文件处理以及常用的IO流操作. 文件操作 概念 File是数据源(保存数据的地方)的一种,可以表示一个文件,也可以表示一个文件目录. File类只能对文件和文件夹进行创建 ...