2013-07-03 46 views
5

Có cách nào để xác định vị trí cuộn hoặc cuộn cuộn hiện tại của GridView không?Độ dịch chuyển cuộn của GridView

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

Tôi đã thử đặt OnScrollListener nhưng cuộc gọi lại onScroll không đủ chi tiết cho mục đích của tôi.

Đây là cách tôi đang cố gắng xác định bù cuộn bằng cách sử dụng OnScrollListener.

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

Vấn đề với mã này là giá trị trả lại y không chính xác khi cuộn lên trên; xem trên được tái chế và do đó, bù đắp y dường như nhảy;

Có cách nào tốt để tính toán độ lệch cuộn của GridView không? Tôi dường như không tìm được giải pháp tốt.

Trả lời

4

Sử dụng tính năng này.

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

Trả về một giá trị int khi gọi

+0

Oh cảm ơn vì đã trả lời câu hỏi này! Tôi đã quên tự mình trả lời sau khi tìm ra. – mdupls

+0

@mdupls Điều này dường như cung cấp cho một Y chính xác bù đắp. Nhưng bạn sử dụng chức năng nào để đặt GridView thành cùng độ lệch? Tôi đã thử khá nhiều, và không thể có được kết quả chính xác. Luôn luôn kết thúc ở các vị trí khác nhau. Tôi đoán, điều này không đơn giản như tôi nghĩ. –

+0

gridview.smoothScrollToPosition (int index) – mdupls

1

Bạn có thể sử dụng GridView.getFirstVisiblePosition().

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

+0

Ngoài ra, xem http://stackoverflow.com/a/12795511/377260 –

+0

"Vấn đề với mã này là trở lại y bù đắp là không chính xác khi di chuyển lên trên ; xem trên được tái chế và do đó, bù đắp y dường như nhảy; " – mdupls

+0

Về cơ bản, bạn không thể sử dụng thuộc tính trên cùng của ô hiển thị đầu tiên như một cách để quản lý cuộn. Thời điểm xem được tái chế, bạn có một bước nhảy với một giới hạn trên bằng cell.getHeight() – mdupls