2013-07-03 2 views
5

Есть ли способ определить текущее смещение прокрутки или положение прокрутки GridView?Смещение прокрутки GridView

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

Я попытался установить в OnScrollListener но OnScroll обратного вызова не хорошо достаточно зернистой для моих целей.

Вот как я пытаюсь определить смещение прокрутки с помощью OnScrollListener.

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

Проблема с этим кодом заключается в том, что возвращаемое смещение y неточно при прокрутке вверх; верхний вид рециркулируется и, следовательно, смещение y, кажется, скачкообразно;

Есть ли хороший способ расчета смещения прокрутки GridView? Кажется, я не могу найти хорошее решение.

ответ

4

Используйте это.

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

Возвращает int значения при вызове

+0

О, спасибо, что ответили на это! Я сам забыл ответить на него, выяснив это. – mdupls

+0

@mdupls Это, кажется, дает правильное смещение Y. Но какую функцию вы используете, чтобы установить Gridview на такое же смещение? Я пробовал немало и не могу получить правильные результаты. Всегда попадайте в разные положения. Я предполагаю, что это не так просто, как я думал. –

+0

gridview.smoothScrollToPosition (int index) – mdupls

1

Вы можете использовать GridView.getFirstVisiblePosition().

http://developer.android.com/reference/android/widget/AdapterView.html#getFirstVisiblePosition()

+0

Также см http://stackoverflow.com/a/12795511/377260 –

+0

«Проблема с этим кодом является то, что возвращаемая у смещения неточный при прокрутке вверх , вид сверху рециркулируется, и, следовательно, смещение y, кажется, скачкообразно "; – mdupls

+0

В принципе, вы не можете использовать первый атрибут первой видимой ячейки как способ управления прокруткой. В тот момент, когда представление переработано, у вас есть прыжок с верхней границей, равной cell.getHeight() – mdupls

Смежные вопросы