2014-01-20 64 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