android開發之橫向滾動/豎向滾動的ListView(固定列頭)

來源:互聯網
上載者:User

由於項目需要,我們需要一個可以橫向滾動的,又可以豎向滾動的 表格。而且又要考慮大資料量(行)的展示視圖。經過幾天的研究終於搞定,做了一個示範。貼圖如下:

好吧。讓我們看思路是什麼樣的:

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建立行時,讓這些行都訂閱 上一步 的觀察者。當 收到訊息後,調整自身的捲軸位置以保持和 列頭 的捲軸位置一致。

代碼比較多,就不貼了。提供代碼下載。

原始碼下載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.