Откуда я знаю, что скроллвью уже прокручивается до дна? - PullRequest
14 голосов
/ 19 мая 2010

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

Я решил это наоборот; разрешить событие, только если оно уже прокручено до самого верха:

ScrollView sv = (ScrollView) findViewById(R.id.Scroll);
    if(sv.getScrollY() == 0) {
        //do something
    }
    else {
        //do nothing
    }

Ответы [ 4 ]

9 голосов
/ 19 мая 2010

Я нашел способ заставить его работать. Мне нужно было проверить измеренную высоту ребенка в ScrollView, в данном случае LinearLayout. Я использую <=, потому что он также должен что-то делать, когда прокрутка не нужна. То есть когда LinearLayout не так высоко, как ScrollView. В этих случаях getScrollY всегда равно 0. </p>

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
    }
5 голосов
/ 25 июля 2013

Вот оно:

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: иногда подходящее время ближе к концу списка - подходящее время для запуска вашего сценария.например, пользователь читает список статей и приближается к концу.тогда вы начинаете загружать больше, прежде чем список заканчивается.Для этого просто сделайте это, чтобы выполнить свою цель:

if(d<=SOME_THRESHOLD) {}
1 голос
/ 27 марта 2013

Вы можете получить максимальную прокрутку для ширины, выполнив это

int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth();

изменить getWidth () на getHeight () для вертикальной прокрутки

0 голосов
/ 19 мая 2010

Если scrollView.getHeight () == scrollView.getScrollY + screenize, то он прокручивается вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...