2013-07-03 16 views
5

Czy istnieje sposób określenia bieżącego przesunięcia przewijania lub pozycji przewijania w widoku GridView?Przesunięcie przewijania GridView

View.getScrollY() // Underlying var is not updated during a scroll. 

Próbowałem ustawienie OnScrollListener ale onScroll zwrotna nie jest w porządku, tyle drobnoziarnisty do moich celów.

Oto, w jaki sposób próbuję określić przesunięcie przewijania za pomocą OnScrollListener.

private int getScrollY() { 
    int top = 0; 
    if (mGridView.getChildCount() > 0) { 
     final View firstView = mGridView.getChildAt(0); 
     top = firstView.getTop(); 
    } 
    return top; 
} 

Problem z tym kodem jest, że wrócił y offset jest niedokładna przy przewijaniu w górę; widok z góry jest poddawany recyklingowi, a zatem przesunięcie y wydaje się przeskakiwać;

Czy istnieje dobry sposób obliczania przesunięcia przewijania GridView? Nie mogę znaleźć dobrego rozwiązania.

Odpowiedz

4

Użyj tego.

public class CustomGridView extends GridView { 

    public CustomGridView(Context context) { 
     super(context); 
    } 

    public CustomGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomGridView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    /* ADD THIS */ 
    @Override 
    public int computeVerticalScrollOffset() { 
     return super.computeVerticalScrollOffset(); 
    } 
} 

Zwraca wartość int po nazwie

+0

Oh dziękuję za odpowiedź! Zapomniałem sam o tym odpowiedzieć, po tym, jak go zrozumiałem. – mdupls

+0

@mdupls Wydaje się, że daje poprawne przesunięcie Y. Ale jakiej funkcji używasz do ustawienia Gridview do tego samego przesunięcia? Próbowałem wielu i nie mogę uzyskać poprawnych wyników. Zawsze kończy się w różnych pozycjach. Zgaduję, to nie jest tak proste, jak myślałem. –

+0

gridview.smoothScrollToPosition (indeks int) – mdupls

1
+0

również zobaczyć http://stackoverflow.com/a/12795511/377260 –

+0

„Problem z tym kodem jest, że wrócił y offset jest niedokładna przy przewijaniu w górę widok z góry jest poddawany recyklingowi, a zatem przesunięcie y wydaje się przeskakiwać; " – mdupls

+0

Zasadniczo nie można użyć pierwszego atrybutu pierwszej widocznej komórki jako sposobu zarządzania zwoju. W momencie, gdy widok jest przetwarzany, masz skok z górną granicą równą cell.getHeight() – mdupls