Android開發(fā)(14) 可以橫向滾動(dòng)的ListView(固定列頭)

概述

由于項(xiàng)目需要诬像,我們需要一個(gè) 可以橫向滾動(dòng)的跪腹,又可以豎向滾動(dòng)的 表格。而且又要考慮大數(shù)據(jù)量(行)的展示視圖开伏。經(jīng)過(guò)幾天的研究終于搞定膀跌,做了一個(gè)演示。

效果圖:

![](http://upload-images.jianshu.io/upload_images/2044033-5ee3cab9f37c4ef6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

設(shè)計(jì)圖

  • 第一列固灵,是固定的捅伤,比如我們第一列一般顯示編號(hào)序號(hào)
  • 其它列,可滾動(dòng)
  • 在其它列滾動(dòng)時(shí)巫玻,列頭(header)也隨之滾動(dòng)

思路

  1. 上下滾動(dòng)直接使用 listView來(lái)實(shí)現(xiàn)丛忆。

  2. 左右滾動(dòng)使用HorizontalScrollView,來(lái)處理滾動(dòng)。我寫一個(gè)類MyHScrollView繼承 自它仍秤。

    2.1 . ListView里的每行(row)分為 兩部分熄诡,不滾動(dòng)的和可滾動(dòng)的區(qū)域。比如本demo的第一列诗力,就是靜態(tài)的凰浮。而后面的所有列都是可以滾動(dòng)的。

    2.2. 我不想自己計(jì)算滾動(dòng)的距離姜骡,因?yàn)檫€要處理越界导坟,坐標(biāo)等等。于是我使用 OnTouch事件來(lái)處理圈澈。于是我們必須搞懂OnTouch的運(yùn)行機(jī)制惫周。了解 請(qǐng)google it.

    2.3. 列頭 (顯示列名的那一行)是固定的,不會(huì)上下滾動(dòng) 康栈。但可以左右滾動(dòng)递递。而且它在左右滾動(dòng)時(shí),所有的 數(shù)據(jù)行(row) ,都要與其一起左右滾動(dòng)啥么。那么我們需要監(jiān)聽 列頭 (控件)的滾動(dòng)變化消息(事件)登舞,并將消息廣播給所有的 數(shù)據(jù)行。這些數(shù)據(jù)行收到消息后悬荣,調(diào)整自己的滾動(dòng)條位置以保持和 列頭 的滾動(dòng)距離一致菠秒。

  3. 那么整個(gè)流程基本是這樣的。

    3.1, 捕獲 列頭(容器控件氯迂,包含固定和可滾動(dòng)控件)的 onTouch事件(拖動(dòng)事件)践叠,不處理言缤。而分發(fā)給 “列頭里的 可滾動(dòng)部分的控件”,該控件是一個(gè)HorizontalScrollView的 子類禁灼, 當(dāng)它收到這些 拖動(dòng)事件時(shí)管挟,就產(chǎn)生了固定的效果

    3.2. 捕獲 數(shù)據(jù)行 區(qū) 的控件(該控件其實(shí)就是ListView控件 )的OnTouch事件,不處理弄捕,同樣分發(fā)給 “列頭里的 可滾動(dòng)部分的控件”僻孝。 這兩步,就完成了一個(gè)小效果守谓,點(diǎn)擊表 格的頭部和體部都能移動(dòng)(滾動(dòng))行穿铆。

    3.3. 我寫了一個(gè) HorizontalScrollView的子類,重載 onScrollChanged 方法分飞,該方法在 滾動(dòng)之后執(zhí)行悴务,相當(dāng)于“滾動(dòng)后的事件”,我寫了一個(gè)觀察者(設(shè)計(jì)模式)的類譬猫。每次 滾動(dòng)后,都通知給 觀察者羡疗。觀察者再通知給它的訂閱者(那些需要同時(shí)滾動(dòng)的行里面的 滾動(dòng)控件)染服。

    3.4. 當(dāng)ListView創(chuàng)建行時(shí),讓這些行都訂閱 上一步 的觀察者叨恨。當(dāng) 收到消息后柳刮,調(diào)整自身的滾動(dòng)條位置以保持和 列頭 的滾動(dòng)條位置一致。


代碼比較多痒钝,就不貼了秉颗。請(qǐng)下載: 源代碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末送矩,一起剝皮案震驚了整個(gè)濱河市蚕甥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栋荸,老刑警劉巖菇怀,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晌块,居然都是意外死亡爱沟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門匆背,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呼伸,“玉大人,你說(shuō)我怎么就攤上這事钝尸±ㄏ恚” “怎么了搂根?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奶浦。 經(jīng)常有香客問我兄墅,道長(zhǎng),這世上最難降的妖魔是什么澳叉? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任隙咸,我火速辦了婚禮,結(jié)果婚禮上成洗,老公的妹妹穿的比我還像新娘五督。我一直安慰自己,他們只是感情好瓶殃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布充包。 她就那樣靜靜地躺著,像睡著了一般遥椿。 火紅的嫁衣襯著肌膚如雪基矮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天冠场,我揣著相機(jī)與錄音家浇,去河邊找鬼。 笑死碴裙,一個(gè)胖子當(dāng)著我的面吹牛钢悲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舔株,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼莺琳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了载慈?” 一聲冷哼從身側(cè)響起惭等,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娃肿,沒想到半個(gè)月后咕缎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡料扰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年凭豪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒杈。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嫂伞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帖努,我是刑警寧澤撰豺,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站拼余,受9級(jí)特大地震影響污桦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匙监,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一凡橱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亭姥,春花似錦稼钩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至粮揉,卻和暖如春巡李,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扶认。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工击儡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝠引。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛀柴,于是被迫代替她去往敵國(guó)和親螃概。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評(píng)論 25 707
  • 太長(zhǎng)了鸽疾,還是轉(zhuǎn)載吧...今天在看博客的時(shí)候吊洼,無(wú)意中發(fā)現(xiàn)了@Trinea在GitHub上的一個(gè)項(xiàng)目Android開源...
    龐哈哈哈12138閱讀 20,154評(píng)論 3 283
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,365評(píng)論 0 17
  • 愚溪詩(shī)序 柳宗元 灌水之陽(yáng)有溪焉制肮,東流入于瀟水冒窍。或曰:冉氏嘗居也豺鼻,故姓...
    以愚辭歌閱讀 182評(píng)論 0 0
  • 周圍都是小販的吆喝聲和喧鬧聲综液,夜色散發(fā)著孤獨(dú)和寂寞的氣味,林暮坐在夜市角落的長(zhǎng)椅上儒飒,忽然想到這幾年來(lái)谬莹,與他的點(diǎn)點(diǎn)滴...
    雨還在下閱讀 345評(píng)論 0 0