检查Android Gridview是否滚动到顶部

时间:2012-07-14 18:57:43

标签: android android-layout android-gridview

我想确定我的Gridview是否滚动到顶部。

现在我正在使用getChildAt(0).getTop()来执行此操作。我在第一次绘制时保存了getChildAt(0).getTop()的值,并在后续绘制时与getChildAt(0).getTop()进行比较。

然而,这看起来很糟糕,似乎有时会给我不正确的结果。

有更好的想法吗?

4 个答案:

答案 0 :(得分:1)

尝试使用onScrollListener

setOnScrollListener(this);

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    if(firstVisibleItem == 0){
        //do stuff here
    }

}

答案 1 :(得分:0)

getChildAt(0)会返回GridView的第一个可见项,我想这不是你想要的。

如果使用yourGridView.getFirstVisiblePosition()方法,它将返回数据适配器的第一个可见位置,这就是你想要的。

答案 2 :(得分:0)

希望这能有所帮助,它对我有用,祝你好运。

yourGridView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(SCROLL_STATE_IDLE == scrollState) { View view = view.getChildAt(0); if(view != null) { float y = view.getY(); Log.d("Tag", "first view Y is " + y); if(y == 0) { // do what you want } } } }

答案 3 :(得分:0)

这是我的答案:

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