滚动条的最大列表大小

时间:2014-01-20 22:54:55

标签: android

我已经实现了自己的HorizontalListView,我想使用Scroller来管理某些滚动事件,例如flings。 Scroller fling()方法要求我提供组件的最大X和Y大小,因此我遇到了一些问题 - 计算列表大小的最佳方法是什么?

我想到了几种方法:

1)最大宽度等于列表元素的宽度乘以列表元素的数量。这个问题是它们的宽度可变。

2)在初始布局上创建列表的所有元素并计算最大宽度。这看起来非常低效。

3)(直到现在我一直在使用的方法)当一个孩子被添加到我的HorizontalListView增量maxWidth时,当一个孩子被移除时,递减{{1} }。我一直用它来限制滚动到我的列表的边界 - 如果没有添加最后一个孩子,那么maxWidth无论如何都是相关的,一旦添加了最后一个孩子,它就是准确的。问题是当列表被抛出时,以这种方式计算的maxWidth可能无法代表列表的实际最大大小。

还有其他建议吗?否则我可能必须实施我自己的投掷机制......

1 个答案:

答案 0 :(得分:0)

基于你的评论我会猜测另一种尝试调整1)有效和2)精度的方法:

我从您的评论中了解到,他们将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)慢一点,但你只需要遍历所有项目并计算它们的字符,乘以字符宽度并添加填充/边距。