2016-03-21 6 views
15

Ich möchte nur die Position der Scroll NestedScrollview Android unten und die Funktion zum Anrufen zu erkennen. mein Code:Wie erkennt man die Position des Scroll NestedScrollview Android unten?

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

       } 
      }); 

aber totalheight nicht denselben Witz MAX Scrolly. wie man es repariert ?

+0

Verwenden 'ViewCompat.canScrollVertically (Blick v, int Richtung)' –

Antwort

3

Ich weiß, es ist spät, aber .. versuchen Sie es auf diese Weise.

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

Glücklich Coding ..

47

Set setOnScrollChangeListener in einem NestedScrollView params

  • NestedScrollView v (Eltern mit Scroll) zu erhalten
  • int Scrolly
  • int oldScrollY

Um zu erkennen, ob der Offset unten ist, ist es erforderlich, den Wert der Inhaltshöhe v.getChildAt(0).getMeasuredHeight() zu erhalten und den aktuellen Bildlauf über die Höhe des übergeordneten Elements zu vergleichen. Wenn Sie denselben Wert haben, bedeutet dies, dass das Ende erreicht ist. mit übergeordneter Ansicht

Sie die Höhe mit 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

Die richtige Antwort, danke zu bekommen. – exshinigami

+1

Wie kann ich überprüfen, wann der Benutzer den Bildlauf angehalten hat, als ob er sich im Leerlauf befindet? –

+0

Kann jemand erklären, warum diese Linie funktioniert? 'if (scrollY == (v.getChildAt (0) .getMeasuredHeight() - v.getMeasuredHeight())) Wie kommt es, dass die gemessene Höhe von" NestedScrollView "kleiner ist als die Höhe des Inhalts, obwohl" NestedScrollView " 'Ist das Elternteil? – coolDude