Обнаружить конец броска в HorizontalScrollView?

Как я могу определить конец события броска в HorizontalScrollView?

Используя GestureDetector, я могу определить, когда onFling начался, но я не могу понять, как определить, когда он завершился. Есть ли какая-нибудь функция обратного вызова или аналогичный трюк, который мне не хватает?


person PhilaPhan80    schedule 04.11.2011    source источник


Ответы (3)


Этот ответ запоздал, но, вероятно, полезен с аналогичными требованиями

Мой подход состоит в том, чтобы переопределить scrollTo представления. С помощью я перепланирую отложенное сообщение с помощью обработчика. Эффект заключается в том, что пока происходит вызов прокрутки, сообщение не будет доставлено. Но когда вызов прокрутки не происходит, сообщение будет доставлено и может использоваться для обозначения окончания «бросания».

Вы поняли идею?

person stefan bachert    schedule 11.03.2012
comment
Спасибо, что написали спустя столько времени! Я давно работал над проблемой, но это интересное решение. К сожалению, у меня нет времени проверить это прямо сейчас, но я отмечу это как ответ, так как это кажется самым чистым решением. Я буду иметь это в виду, если мне когда-нибудь понадобится сделать что-то подобное снова. Спасибо еще раз! - person PhilaPhan80; 12.03.2012
comment
Я думаю, что лучше переопределить View.onScrollChanged: он вызывается в ответ на scrollTo и scrollBy. - person brillenheini; 09.08.2013

Вероятно, путем обнаружения при прокрутке


Как насчет этого :

Используйте комбинацию onFling() и onScrollChanged(). Когда происходит событие броска И следует событие прокрутки, вы получите точное количество изменений.

person Reno    schedule 05.11.2011
comment
Это может сработать, если бросок отправляет представление за его границы (избыточная прокрутка), но могут быть случаи, когда это действительно длинное представление, а бросок остается в этих границах. Я больше ищу инициированное событие или установленный флаг и т. д. - person PhilaPhan80; 05.11.2011
comment
Кроме того, API OnOverScroll() недоступен на более старых уровнях API, таких как 8 и т. д. - person VJ Vélan Solutions; 14.11.2011
comment
Из того, что я вижу, onFling() запускается после серии onScroll(), когда я запускаю HorizontalScrollView. - person VJ Vélan Solutions; 14.11.2011

Я надеюсь, что это сработает для видимого и невидимого конца горизонтальной прокрутки scrollView.

hsv.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
            View view = (View) hsv.getChildAt(hsv.getChildCount() - 1);
            int diff = (view.getRight() - (hsv.getWidth() + hsv.getScrollX()));

            if (diff <= 0) {
                next.setVisibility(View.INVISIBLE);
            } else {
                next.setVisibility(View.VISIBLE);
            }
        }
    });
person Dinesh Kumar    schedule 03.05.2017