5

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

现在我正在使用 getChildAt(0).getTop() 来做到这一点。我在第一次绘制时保存 getChildAt(0).getTop() 的值,并在后续绘制时与 getChildAt(0).getTop() 进行比较。

但是,这似乎很老套,有时似乎会给我不正确的结果。

有更好的想法吗?

4

4 回答 4

1

尝试使用onScrollListener

setOnScrollListener(this);

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

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

}
于 2013-03-14T00:39:54.470 回答
0

返回给您 GridView的getChildAt(0)第一个可见项目,我猜这不是您想要的。

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

于 2012-07-14T19:25:05.070 回答
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 } } } }

于 2014-05-07T05:37:21.050 回答
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);
                        }
                    } 
                }
            });
于 2016-03-16T05:28:50.167 回答