我有两列的gridview 用户可以垂直滚动以查看gridview项目 问题是用户滚动完成时 第一个可见的行没有完全看到。我想将第一个可见行的顶部设置为gridview的顶部,因此第一行是完全可见的
任何人都可以帮助我吗?
更新: 第一项是 第二项是
但滚动后我们看到了
答案 0 :(得分:0)
你可以试试这个
grid.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView arg0, int scrollState) {
//this is the state when scroll finish
if(scrollState==SCROLL_STATE_IDLE)
//the first visible item is the first (even partially) visbile item
//setSelection will scroll the grid to the beginning of such item
grid.setSelection(firstVisibleItem);
}
@Override
public void onScroll(AbsListView arg0, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
答案 1 :(得分:0)
我使用RecyclerView,我希望它对你有好处!
mLayoutManager = new GridLayoutManager(getActivity(), 2);
mListRV= (RecyclerView).findViewById(R.id.list_rv);
mListRV.setLayoutManager(mLayoutManager);
mListRV.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
View v = mLayoutManager.getChildAt(0);
int offsetTop = v.getTop();
int offsetBottom = v.getBottom();
int height = (offsetBottom - offsetTop);
if(offsetTop >= -height/2) {
mListRV.smoothScrollBy(0, offsetTop);
} else {
mListRV.smoothScrollBy(0, height + offsetTop);
}
}
}
});
使用此代码,当您完成滚动时,如果第一个可见项目仅显示recyclelerView中的一部分。它会自动滚动显示完整项目。您可以使用:
mLayoutManager.scrollToPositionWithOffset(position, offset);
但它太快了,用户可能会感到困惑。而且您不需要使用customLayoutManager来编辑滚动的属性。
希望对你有帮助!