2013-07-03 1 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(); 
    } 
} 

+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

"int 참조라는 값을 반환 코드의 문제는 Y 오프셋을 반환이다 위쪽으로 스크롤 할 때 부정확 윗면보기가 재활용되어 y 오프셋이 점프하는 것처럼 보입니다. " – mdupls

+0

기본적으로 첫 번째 보이는 셀의 top 속성을 스크롤 관리 방법으로 사용할 수 없습니다. 뷰를 재활용하는 순간 상한값은 cell.getHeight()와 같습니다. – mdupls

관련 문제