2011-08-19 55 views
1

我的網格有很多行(例如1 000 000)。每行的高度可能是唯一的。但大多數行具有相同的高度。所以無法確定每一行的高度並獲得總的網格高度。用不同的行高計算網格中的滾動條高度

我需要在此網格上實現平滑的垂直滾動,不僅可以跳過行,因爲行可以高於可見區域。

我的解決辦法是:行

  1. 獲取數
  2. 每行被分爲10份
  3. =>滾動條最大值爲(行數)×10
  4. 從滾動我得到的位置:
    • 第一個可見行=(滾動位置)/ 10
    • 第一個可見行移動=(滾動位置)% 10

這項工作很好,如果所有的行都具有+ - 相同的高度。如果有一個高度爲500像素的行,其他像素爲25像素滾動看起來很糟糕。

有人建議如何更好的解決這個問題?

電網是在這裏: http://img560.imageshack.us/img560/7775/scroll.png

回答

0

讓滾動在像素單位:

  • 總和所有行的總高度,並設置滾動條最大值爲該值。
  • 緩存變量中的第一個可見行索引。
  • 當用戶向上或向下滾動時,可以從當前第一個可見行開始順序掃描以找到新行。這爲連續讀取每個更新提供了分攤的恆定時間工作。
  • 您不會頻繁進行隨機存取(例如,滾動至第N行),因此在您進行線性搜索時可以很好。如果你需要更快的東西(我懷疑它),那麼你可以預先計算行高的部分總和並進行二分搜索。
+0

從數據庫裝載1 000 000行僅用於求和總高度是無效的。 – weny

+0

@weny:如果數據庫未經常更新並始終以相同順序顯示,則可以將部分和存儲在數據庫中。對不起,但沒有其他方法可以做到這一點(正確)。 – ybungalobill