20

私は独自のグリッド ビュー関数を構築しようとしています - で拡張しますGridView。私が解決できない唯一のことは、の現在のスクロール位置を取得する方法GridViewです。

getScrollY()は常に 0 を返します。onScrollListenerのパラメータは、実際のスクロール位置ではなく、表示される子ビューの範囲です。

これはそれほど難しくないように思えますが、Web で解決策を見つけることができません。

アイデアを持っている人はいますか?

4

2 に答える 2

13

良い解決策は見つかりませんでしたが、これは少なくともスクロール位置をピクセル単位で完全に維持できます。

int offset = (int)(<your vertical spacing in dp> * getResources().getDisplayMetrics().density); 
int index = mGrid.getFirstVisiblePosition();
final View first = container.getChildAt(0);
if (null != first) {
    offset -= first.getTop();
}

// Destroy the position through rotation or whatever here!

mGrid.setSelection(index);
mGrid.scrollBy(0, offset);

それによって、絶対スクロール位置を取得することはできませんが、表示アイテム + 変位ペアを取得できます。

ノート:

  • これは、API 8 以降を対象としています。
  • API 16 以降では mGrid.getVerticalSpacing() で取得できます。
  • API 11 以降では、最後の 2 行の代わりに mGrid.smoothScrollToPositionFromTop(index, offset) を使用できます。

それが助けになり、あなたにアイデアを与えることを願っています。

于 2012-10-09T08:04:49.007 に答える