2016-03-21 14 views
15

voglio solo rilevare la posizione dello scroll nestedscrollview android nella parte inferiore e la funzione di chiamata. il mio codice è:come rilevare la posizione dello scroll nestedscrollview android in basso?

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"); 
       } 

       } 
      }); 

ma totalheight non stesso spirito MAX scrolly. come sistemarlo ?

+0

Usa 'ViewCompat.canScrollVertically (Visualizza v, int direzione)' –

risposta

3

So che è tardi ma .. prova in questo modo.

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"); 
      }   
    } 
}); 

Felice Coding ..

47

Set setOnScrollChangeListener in NestedScrollView params per ottenere

  • NestedScrollView v (genitore con scorrimento)
  • int scrolly
  • int oldScrollY

Per rilevare se l'offset si trova nella parte inferiore, è necessario ottenere il valore dell'altezza del contenuto v.getChildAt(0).getMeasuredHeight() e confrontare lo scorrimento corrente sull'altezza del genitore, se si ha lo stesso valore, significa che è giunto alla fine.

È possibile ottenere l'altezza con vista genitore con 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

La risposta giusta, grazie. – exshinigami

+1

Come verificare quando l'utente ha smesso di scorrere come una volta che diventa inattivo? –

+0

Qualcuno sarebbe in grado di spiegare perché questa linea funziona? 'if (scrollY == (v.getChildAt (0) .getMeasuredHeight() - v.getMeasuredHeight()))' Come è possibile che l'altezza misurata di 'NestedScrollView' sia inferiore all'altezza del contenuto, anche se' NestedScrollView 'è il genitore? – coolDude

Problemi correlati