我正在尝试构建自己的网格 View 功能-在GridView上扩展。
我唯一无法解决的是如何获取GridView的当前滚动位置。
getScrollY()确实总是返回0,并且onScrollListener的参数只是一系列可见的 subview ,而不是实际的滚动位置。

这似乎并不困难,但我只是无法在网络上找到解决方案。

这里有人有主意吗?

最佳答案

我没有找到任何好的解决方案,
但是这一点至少能够完美地保持滚动位置的像素水平:

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+中使用mGrid.smoothScrollToPositionFromTop(index,offset)而不是最后两行。

  • 希望对您有所帮助,并给您一个想法。

    关于android - 如何从GridView获取滚动位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6125013/

    10-10 03:25