2014-01-20 96 views
0

我已經實現了我自己的HorizontalListView,我想用Scroller來管理某些滾動事件,例如fl。。 Scrollerfling()方法要求我提供組件的最大X和Y大小,所以我遇到了一些問題 - 計算列表大小的最佳方法是什麼?卷軸的最大列表大小

我已經想到的幾種方法:

1)最大值寬度等於列表倍的元素列表中的元素的數量的寬度。這個問題在於它們的寬度是可變的。

2)在初始佈局中創建列表的所有元素並計算最大寬度。這似乎非常低效。當孩子被添加到我的maxWidth增加我的maxWidth,並且當一個孩子被刪除時,遞減maxWidth 3)(我一直使用到現在爲止的方法)

。我一直在使用它來限制滾動到我的列表範圍 - 如果最後一個孩子還沒有被添加,那麼maxWidth是無關的,一旦最後一個孩子被添加,它是準確的。問題是,當列表被拋出時,以這種方式計算的maxWidth可能並不代表列表的實際最大大小。

其他建議?否則,我可能要實現自己一扔機制......根據您的評論

+0

我可能會堅持使用您的方法編號1的平均大小。 – Budius

+0

這不是一個好方法 - 不幸的是,從1個字符的TextViews到整個單詞,尺寸可能會有很大的不同。 – Catherine

回答

0

我猜的另一種方法試圖2)精度1之間調整)高效和:

我從您的評論理解,它們將TextView您的適配器視圖。 所以,你可能使用這樣的方法可以計算出總的大小:

int space = adapter.getCount() * textview.leftMargin + rightMargin + leftPadding + rightPadding; 
float textsize = 0; 
for(int i = 0; i < adapter.getCount(); i++){ 
    textsize += adapter.getItem().toString().lenght(); 
} 
textSize = textSize * "size of text in your XML. e.g. 14 for 14dp * scale factor" 

int listSize = space + textSize; 

它肯定比1慢一點),但你必須在經過所有項目並計算它們的字符,乘字符寬度和添加填充/邊距。

+0

但是字符不是統一的寬度。我可能仍然需要測量所有的TextView。也許我可以創建一個TextView並迭代我的所有文本,更新臨時TextView中的文本並重新測量。儘管如此,如果我使用TextViews以外的其他工具,那還是非常不好的做法。 – Catherine