在Android gridview中设置第一个可见项目

时间:2014-04-24 06:13:37

标签: android

我有两列的gridview 用户可以垂直滚动以查看gridview项目 问题是用户滚动完成时 第一个可见的行没有完全看到。我想将第一个可见行的顶部设置为gridview的顶部,因此第一行是完全可见的

任何人都可以帮助我吗?

更新: 第一项是 enter image description here 第二项是 enter image description here

但滚动后我们看到了 enter image description here

2 个答案:

答案 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来编辑滚动的属性。

希望对你有帮助!