2016-03-21 26 views
15

Chcę tylko wykryć pozycję przewróconego zagnieżdżonego ekranu androida na dole i wywołać funkcję. mojego kodu jest:jak wykryć pozycję przewróconego zagnieżdżonego ekranu androida na dole?

scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
       @Override 
       public void onScrollChanged() { 
        int totalHeight = scroll.getChildAt(0).getHeight(); 
        int scrollY = scroll.getScrollY(); 
Log.v("position","totalHeight="+totalHeight+"scrollY="+scrollY); 
        if (scrollY==totalHeight) { 
        getPlaylistFromServer("more"); 
       } 

       } 
      }); 

ale totalheight nie sam dowcip MAX ScrollY. jak to naprawić ?

+0

użytkowania 'ViewCompat.canScrollVertically (Zobacz v, int kierunek)' –

Odpowiedz

3

Wiem, że jest późno, ale .. spróbuj w ten sposób.

scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
    @Override 
    public void onScrollChanged() { 
      View view = (View) scroll.getChildAt(scroll.getChildCount() - 1); 

      int diff = (view.getBottom() - (scroll.getHeight() + scroll 
        .getScrollY())); 

      if (diff == 0) { 
       getPlaylistFromServer("more"); 
      }   
    } 
}); 

Szczęśliwy Coding ..

47

Set setOnScrollChangeListener w ciągu NestedScrollView params dostać

  • NestedScrollView v (rodzic z przewijaniem)
  • int scrollY
  • int oldScrollY

Aby wykryć, czy przesunięcie znajduje się na dole, konieczne jest uzyskanie wartości wysokości treści v.getChildAt(0).getMeasuredHeight() i porównanie bieżącego zwoju ponad wysokość elementu nadrzędnego, jeśli masz tę samą wartość, oznacza to, że osiągnął koniec.

można uzyskać wysokość z widokiem macierzystym z v.getMeasuredHeight()

NestedScrollView scroller = (NestedScrollView) findViewById(R.id.myScroll); 

if (scroller != null) { 

    scroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 

      if (scrollY > oldScrollY) { 
       Log.i(TAG, "Scroll DOWN"); 
      } 
      if (scrollY < oldScrollY) { 
       Log.i(TAG, "Scroll UP"); 
      } 

      if (scrollY == 0) { 
       Log.i(TAG, "TOP SCROLL"); 
      } 

      if (scrollY == (v.getMeasuredHeight() - v.getChildAt(0).getMeasuredHeight())) { 
       Log.i(TAG, "BOTTOM SCROLL"); 
      } 
     } 
    }); 
} 
+2

Prawo odpowiedź, dziękuję. – exshinigami

+1

Jak sprawdzić, czy użytkownik przestał przewijać, jak tylko stanie się bezczynny? –

+0

Czy ktoś mógłby wyjaśnić, dlaczego ta linia działa? 'if (scrollY == (v.getChildAt (0) .getMeasuredHeight() - v.getMeasuredHeight()))' Jak to jest, że zmierzona wysokość 'NestedScrollView' jest mniejsza niż wysokość zawartości, mimo że' NestedScrollView 'jest rodzicem? – coolDude