android - How to determine if a NestedScrollView is scrolled to the end and is idle? -


tried :

nestedscrollview ns =(nestedscrollview) findviewbyid(r.id.nested_scroll);         ns.setonscrollchangelistener(new nestedscrollview.onscrollchangelistener() {             @override             public void onscrollchange(nestedscrollview v, int scrollx, int scrolly, int oldscrollx, int oldscrolly) {              }         }); 

but got stuck, have idea?

just clearify want - want able observe scroll state (as in addonscrolllistener of recyclerview) , check once, when scrolling has ended (idle), if user scrolled end of nestedscrollview.

unfortunately, nestedscrollview not support implementation dispatches scroll state, because totally different kind of scroll view. framelayout scroller.

usually, end of scroll view reached when viewcompat.canscrollvertically (scrollview, -1) returns false. scroll state need subclass nestedscrollview , add own interface similar 1 of recyclerview. interface method should called in following overriden methods:

stopnestedscroll() -> scroll_state_idle

startnestedscroll() -> scroll_state_dragging

dispatchnestedprefling() -> scroll_state_flinging

please don't forget make super calls of these methods. if don't break nestedscrollview behavior

edit:

public class nestedscrollingview extends nestedscrollview {     private int mstate = recyclerview.scroll_state_idle;      public interface nestedscrollviewscrollstatelistener {         void onnestedscrollviewstatechanged(int state);     }       public void setscrolllistener(nestedscrollviewscrollstatelistener scrolllistener) {         this.mscrolllistener = scrolllistener;     }      private nestedscrollviewscrollstatelistener mscrolllistener;      public nestedscrollingview(context context) {         super(context);     }      public nestedscrollingview(context context, attributeset attrs) {         super(context, attrs);     }      public nestedscrollingview(context context, attributeset attrs, int defstyleattr) {         super(context, attrs, defstyleattr);     }      @override     public void stopnestedscroll() {         super.stopnestedscroll();         dispatchscrollstate(recyclerview.scroll_state_idle);     }      @override     public boolean onstartnestedscroll(view child, view target, int nestedscrollaxes) {         dispatchscrollstate(recyclerview.scroll_state_dragging);         return super.onstartnestedscroll(child, target, nestedscrollaxes);     }       @override     public boolean startnestedscroll(int axes) {         boolean superscroll = super.startnestedscroll(axes);         dispatchscrollstate(recyclerview.scroll_state_dragging);         return superscroll;     }       private void dispatchscrollstate(int state) {         if (mscrolllistener != null && mstate != state) {             mscrolllistener.onnestedscrollviewstatechanged(state);             mstate = state;         }     }  }