android开发(14) 可以横向滚动的ListView(固定列头)
来源:互联网 发布:quicktime 4 linux 编辑:程序博客网 时间:2024/05/22 00:44
好吧。让我们看思路是什么样的:
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创建行时,让这些行都订阅 上一步 的观察者。当 收到消息后,调整自身的滚动条位置以保持和 列头 的滚动条位置一致。
----
代码比较多,就不贴了。提供代码下载。
源代码下载。
- android开发(14) 可以横向滚动的ListView(固定列头)
- android开发之横向滚动/竖向滚动的ListView(固定列头)
- ListView的横向滚动(带表头与固定列)
- Android横向ListView可以滚动
- 【Android】用RecycleView实现可以横向滚动的ListView效果
- android listview 横向滚动
- 横向滚动的ListView
- 表格头固定而列可滚动的效果
- 横向ListView的自动滚动
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
- Android开发--横向滑动的listview
- WinForm ListView 列自适应宽度(去除最后空白列,去除横向滚动条)
- GridView 实现固定表头,但可以纵向,横向滚动Item
- 横向两列布局(左列固定,右列自适应)的4中实现方式
- Android文字自动横向滚动的TextView(文字长度不够也可以)
- ListView的下拉刷新上拉加载以及带列的横向滚动
- 网页表格表头固定并可以自由拉伸列头的问题解决 (完美方案_html_table_seo)
- arcgis for android 学习 - (6) 属性查询。检索图层上某个要素,并高亮显示它。
- arcgis for android 学习 - (7) 在真机上 模拟GPS
- 设计模式之一(单例模式)
- LOG4J输出日志到web目录的相对路径
- android开发(13) 尝试在流布局中移动控件
- android开发(14) 可以横向滚动的ListView(固定列头)
- android开发(15) 调用摄像头拍照,保存在照片到数据库。
- UIImageView 的圆角效果
- android开发(16) 遍历所有的已经安装的应用程序,启动其他的应用程序
- android开发(17) 扫描二维码 - 调用第三方APK来实现二维码扫描,参考自 开源项目zxing
- Java中的private、protected、public和default的区别
- android开发(18) 调用手机的麦克风录音,并播放。
- android开发(19) 调用手机的摄像头录像,并播放。
- .net 中,使用c# 语言 ,执行exe程序。