Estou usando um HorizontalScrollView
em um layout e preciso identificar se o usuário atingiu o ponto inicial e final do pergaminho.
Pois ListView
eu tentei um onScrollListener
e é possível encontrar o ponto inicial e final do scroll.
Eu tentei fazer o mesmo no meu, Scrollview
mas parece não possível. Existem outras maneiras possíveis de conseguir o que eu preciso.
android
listener
scrollview
ARNP
fonte
fonte
onStart
fará o truque:hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
em onStart (), ondehsv
está umHorizontalScrollView
trabalho.Respostas:
Cada instância do View chama
getViewTreeObserver()
. Agora, quando segurando uma instânciaViewTreeObserver
, você pode adicionar umOnScrollChangedListener()
a ele usando o métodoaddOnScrollChangedListener()
.Você pode ver mais informações sobre esta classe aqui .
Ele permite que você esteja ciente de todos os eventos de rolagem - mas sem as coordenadas. Você pode obtê-los usando
getScrollY()
ougetScrollX()
de dentro do ouvinte.fonte
hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
em onStart () ondehsv
está umHorizontalScrollView
trabalho. Eu suspeito que o mesmo funcionará para um ScrollView também.add
e nãoset
, todos os ouvintes serão retidos até serem removidos explicitamente. Portanto, a classe anônima usada como uma implementação de ouvinte na amostra vazará (junto com tudo o que estiver fazendo referência, ou seja, a classe externa).Isso pode ser muito útil. Use em
NestedScrollView
vez deScrollView
. A Biblioteca de suporte 23.1 introduziu umOnScrollChangeListener
paraNestedScrollView
. Então você pode fazer algo assim.fonte
NestedScrollView
faz parte da biblioteca de suporte, seusetOnScrollChangeListener
método não possui requisitos de versão mínima.View
osetOnScrollChangeListener
que requer nível 23 da APIAqui está um HorizontalScrollView derivado que escrevi para manipular notificações sobre rolagem e final de rolagem. Ele lida adequadamente quando um usuário parou de rolar ativamente e quando desacelera completamente depois que o usuário solta:
fonte
Se você deseja conhecer a posição de rolagem de uma exibição, poderá usar a seguinte função de extensão na classe View:
fonte
Você pode usar em
NestedScrollView
vez deScrollView
. No entanto, ao usar um Kotlin Lambda, ele não saberá que você deseja NestedScrollView, emsetOnScrollChangeListener
vez daquele no View (que é o nível 23 da API). Você pode corrigir isso especificando o primeiro parâmetro como um NestedScrollView.fonte
fonte
você pode definir uma classe ScrollView personalizada e adicionar uma interface a ser chamada ao rolar assim:
fonte