android开发之横向滚动/竖向滚动的ListView(固定列头)

大连老虎滩20

大连老虎滩20

2016-02-19 10:49

今天给大家分享的是由图老师小编精心为您推荐的android开发之横向滚动/竖向滚动的ListView(固定列头),喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

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

      

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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创建行时,让这些行都订阅 上一步 的观察者。当 收到消息后,调整自身的滚动条位置以保持和 列头 的滚动条位置一致。

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

源代码下载。 

展开更多 50%)
分享

猜你喜欢

android开发之横向滚动/竖向滚动的ListView(固定列头)

编程语言 网络编程
android开发之横向滚动/竖向滚动的ListView(固定列头)

android ListView自动滚动方法

编程语言 网络编程
android ListView自动滚动方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

android ListView的右边滚动滑块启用方法 分享

编程语言 网络编程
android ListView的右边滚动滑块启用方法 分享

android开发之方形圆角listview代码分享

编程语言 网络编程
android开发之方形圆角listview代码分享

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

javascript之水平横向滚动歌词同步的应用

Web开发
javascript之水平横向滚动歌词同步的应用

如何制作平面式列头的Listview

编程语言 网络编程
如何制作平面式列头的Listview

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

为你盘点Windows7那些运行命令

为你盘点Windows7那些运行命令

window.open()弹出居中的窗口

window.open()弹出居中的窗口
下拉加载更多内容 ↓