我想确定我的Gridview是否滚动到顶部。
现在我正在使用getChildAt(0).getTop()来执行此操作。我在第一次绘制时保存了getChildAt(0).getTop()的值,并在后续绘制时与getChildAt(0).getTop()进行比较。
然而,这看起来很糟糕,似乎有时会给我不正确的结果。
有更好的想法吗?
答案 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);
}
}
}
});