Как узнать, что scrollview уже прокручивается вниз?
У меня есть scrollview, и мне нужно только, чтобы событие произошло, если оно уже прокручивается донизу, но я не могу найти способ проверить, находится ли прокрутка в нижней части.
Я решил это для противоположного; только разрешить событие, если оно уже прокручивается вверху:
ScrollView sv = (ScrollView) findViewById(R.id.Scroll);
if(sv.getScrollY() == 0) {
//do something
}
else {
//do nothing
}
Ответы
Ответ 1
Я нашел способ заставить его работать. Мне нужно было проверить измеренную высоту ребенка на ScrollView, в этом случае LinearLayout. Я использую < =, потому что он также должен что-то делать, когда прокрутка не требуется. То есть когда LinearLayout не так высок, как ScrollView. В таких случаях getScrollY всегда 0.
ScrollView scrollView = (ScrollView) findViewById(R.id.ScrollView);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout);
if(linearLayout.getMeasuredHeight() <= scrollView.getScrollY() +
scrollView.getHeight()) {
//do something
}
else {
//do nothing
}
Ответ 2
Вот он:
public class myScrollView extends ScrollView
{
public myScrollView(Context context)
{
super(context);
}
public myScrollView(Context context, AttributeSet attributeSet)
{
super(context,attributeSet);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt)
{
View view = (View)getChildAt(getChildCount()-1);
int d = view.getBottom();
d -= (getHeight()+getScrollY());
if(d==0)
{
//you are at the end of the list in scrollview
//do what you wanna do here
}
else
super.onScrollChanged(l,t,oldl,oldt);
}
}
Вы можете использовать myScrollView в макете xml или создать его в своем коде.
Подсказка: с кодом выше, если пользователь попадает в конец списка в 10 раз чаще, чем ваш код будет работать 10 раз. В некоторых случаях, например, когда вы хотите загрузить данные с удаленного сервера для обновления своего списка, это поведение будет нежелательным (скорее всего). попробуйте предсказать нежелательную ситуацию и избежать их.
Подсказка 2: иногда приближение к концу списка может быть подходящим временем для запуска вашего script. например, пользователь читает список статей и приближается к концу. то вы начнете загружать больше до завершения списка. Для этого просто выполните это для достижения своей цели:
if(d<=SOME_THRESHOLD) {}
Ответ 3
Вы можете получить максимальную прокрутку для ширины, сделав это
int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth();
изменить getWidth() на getHeight() для вертикальных просмотров прокрутки
Ответ 4
Если scrollView.getHeight() == scrollView.getScrollY + экранируется, то он прокручивается вниз.