2011-12-27 2 views
0

В scrollView для Android, как вы находите самую низкую позицию в scrollview, чтобы затем использовать метод scrollTo(x,y) для прокрутки вправо. Мне нужно фактическое числовое значение. Использование метода getHeight() никогда не возвращает правильное значение. Полоса прокрутки иногда прокручивается до конца, а иногда и не достигает ее. В scrollview есть линейное расписание с текстовым просмотром. Должно быть что-то, что мне не хватает?Как найти нижнюю прокручиваемую позицию в ScrollView?

ответ

1

Спасибо за ответ. Я нашел быстрый хак, если кому-то это интересно.

sView.fullScroll(View.FOCUS_DOWN); 
sView.fullScroll(View.FOCUS_DOWN); 
y = sView.getScrollY(); 
sView.fullScroll(View.FOCUS_UP); 

Это спустится вниз, чтобы прокрутить, собрать y, а затем снова прыгнуть вверх. Это происходит так быстро, что не видно, и каждый раз вы получите нижнее значение y. Вам нужно дважды сфокусировать фокус, иначе y вернет 0.

1

Если вы хотите просто прокрутить страницу до конца, вы должны просто использовать fullScroll (ScrollView.FOCUS_DOWN). Если вам требуется особенно численное значение в зависимости от высоты прокрутки, вам придется подклассифицировать вид прокрутки и переопределить onSizeChanged, что даст вам фактическую численную высоту. Имейте в виду, что onSizeChanged будет вызываться только после onResume и не обязательно будет вызываться каждый раз, когда ваша активность возобновится.

Часть причины, по которой вы иногда прокручиваете до конца, а иногда нет, вероятно, из-за состояния гонки. Иногда ваш свиток происходит до того, как произошли другие важные вещи (например, заполнение вида), поэтому он ничего не делает.

Try размещения вызовов на обработчике ваш взгляд скроллинга:

yourScrollView.post(new Runnable(){ 
    @Override 
    public void run(){ 
    yourScrollView.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}; 

Иногда даже добавление короткая задержка может помочь:

yourScrollView.postDelayed(new Runnable(){ 
    @Override 
    public void run(){ 
    yourScrollView.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}, 200); 
Смежные вопросы