当前位置: 首页 > news >正文

android开发(14) 可以横向滚动的ListView(固定列头)

由于项目需要,我们需要一个 可以横向滚动的,又可以竖向滚动的 表格。而且又要考虑大数据量(行)的展示视图。经过几天的研究终于搞定,做了一个演示。贴图如下:

      

 好吧。让我们看思路是什么样的:

 

1. 上下滚动直接使用 listView来实现。

2. 左右滚动使用HorizontalScrollView,来处理滚动。我写一个类MyHScrollView继承 自它。

    2.1 . ListView里的每行(row)分为 两部分,不滚动的和可滚动的区域。比如本demo的第一列,就是静态的。而后面的所有列都是可以滚动的。

    2.2.  我不想自己计算滚动的距离,因为还要处理越界,坐标等等。于是我使用 OnTouch事件来处理。于是我们必须搞懂OnTouch的运行机制。了解 请google it.

    2.3.  列头 (显示列名的那一行)是固定的,不会上下滚动 。但可以左右滚动。而且它在左右滚动时,所有的 数据行(row) ,都要与其一起左右滚动。那么我们需要监听 列头             (控件)的滚动变化消息(事件),并将消息广播给所有的 数据行。这些数据行收到消息后,调整自己的滚动条位置以保持和 列头 的滚动距离一致。

3. 那么整个流程基本是这样的。 

    3.1, 捕获 列头(容器控件,包含固定和可滚动控件)的 onTouch事件(拖动事件),不处理。而分发给 “列头里的 可滚动部分的控件”,该控件是一个HorizontalScrollView的        子类,           当它收到这些 拖动事件时,就产生了固定的效果

    3.2. 捕获 数据行 区 的控件(该控件其实就是ListView控件 )的OnTouch事件,不处理,同样分发给  “列头里的 可滚动部分的控件”。 这两步,就完成了一个小效果,点击表      格的头部和体部都能移动(滚动)行。

    3.3.  我写了一个 HorizontalScrollView的子类,重载 onScrollChanged 方法,该方法在 滚动之后执行,相当于“滚动后的事件”,我写了一个观察者(设计模式)的类。每次       滚动后,都通知给 观察者。观察者再通知给它的订阅者(那些需要同时滚动的行里面的 滚动控件)。

    3.4.   当ListView创建行时,让这些行都订阅 上一步 的观察者。当 收到消息后,调整自身的滚动条位置以保持和 列头 的滚动条位置一致。

 

----

 代码比较多,就不贴了。提供代码下载。

源代码下载。 

 

 

相关文章:

  • 2017年度上海市人工智能创新发展项目开始申报
  • VRRP和HSRP
  • 如何编写一个高性能的Angular组件
  • 谷歌为Pwnium***竞赛再掷重金 将提供200万美元奖金
  • MySQL数据库日志介绍
  • heartbeat高可用+lvsDR
  • java并发编程充入锁:ReentrantLock
  • 鱼C扫描器
  • 云栖科技评论第29期:《MIT科技评论》杂志公布2017年度全球十大突破技术
  • 用C语言写的迅雷看看XV文件提取器及C语言源代码
  • NSF之旅:3月6号,今天要完成相关研究和前两个内容的技术路线
  • 通用业务系统基础平台(五) 工作流系统
  • zookeeper -- 第八章 zk开源客户端 Curator介绍 (下)
  • Flex中使用HTTPService与服务器端交换数据
  • Oculus Touch再度被坑,这次是电商Saturn流出上架信息
  • 【mysql】环境安装、服务启动、密码设置
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Fundebug计费标准解释:事件数是如何定义的?
  • git 常用命令
  • Java IO学习笔记一
  • JWT究竟是什么呢?
  • Promise面试题2实现异步串行执行
  • Python_OOP
  • React-生命周期杂记
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用agvtool更改app version/build
  • ​批处理文件中的errorlevel用法
  • (C)一些题4
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (libusb) usb口自动刷新
  • (pojstep1.3.1)1017(构造法模拟)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (算法)Travel Information Center
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.01.19
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)OpenStack Hacker养成指南
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 项目指定SDK版本
  • .net MySql
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .Net接口调试与案例
  • .NET企业级应用架构设计系列之技术选型
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • :“Failed to access IIS metabase”解决方法
  • @Builder用法