2014-01-20 7 views
0

Я внедрил свой собственный HorizontalListView, и я бы хотел использовать Scroller для управления некоторыми событиями прокрутки, такими как flings. Метод Scrollerfling() требует, чтобы я предоставил максимальный размер X и Y для моего компонента, и поэтому я немного затрудняюсь - лучший способ рассчитать размер моего списка?Максимальный размер списка для скроллера

Я подумал о нескольких подходов:

1) Максимальная ширина равна ширине элементов времени вывести количество элементов списка. Проблема в том, что они являются переменной шириной.

2) Создайте все элементы списка при начальной компоновке и рассчитайте максимальную ширину. Это кажется ужасно неэффективным.

3) (подход, который я никогда раньше использовал до сих пор), когда ребенок добавляются к моему HorizontalListView приращению моего maxWidth, а когда ребенок удаляются, уменьшает maxWidth. Я использовал это, чтобы ограничить прокрутку до границ моего списка - если последний ребенок не был добавлен, то maxWidth не имеет никакого отношения к делу, и как только последний ребенок был добавлен, он является точным. Проблема заключается в том, что при рассылке списка вычисляемый таким образом maxWidth может не соответствовать фактическому максимальному размеру списка.

Любые другие предложения? В противном случае я мог бы реализовать свой собственный механизм Fling ...

+0

Я, вероятно, придерживаюсь среднего размера, используя ваш подход № 1. – Budius

+0

Это не отличный подход - к сожалению, размеры могут сильно различаться: от 1 символа TextViews до целых слов. – Catherine

ответ

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), но вы просто должны пройти через все пункты и сосчитать их символов, умножить на ширину и добавление прокладок/полей.

+0

Но символы имеют неравномерную ширину. Мне, вероятно, все равно придется измерять все текстовые элементы. Возможно, я мог бы просто создать один TextView и перебрать все мои тексты, обновить текст в Temp TextView и переоценить. Тем не менее, супер хаки, если я когда-нибудь займусь чем-то другим, кроме TextViews. – Catherine

Смежные вопросы