我想确定我的Gridview是否滚动到了顶部。
现在我正在使用getChildAt(0).getTop()来实现这个目标。我会在第一次绘制时保存getChildAt(0).getTop()的值,并在随后的绘制中将其与getChildAt(0).getTop()进行比较。
然而,这似乎有些hacky,有时候会给我不正确的结果。
有更好的想法吗?
我想确定我的Gridview是否滚动到了顶部。
现在我正在使用getChildAt(0).getTop()来实现这个目标。我会在第一次绘制时保存getChildAt(0).getTop()的值,并在随后的绘制中将其与getChildAt(0).getTop()进行比较。
然而,这似乎有些hacky,有时候会给我不正确的结果。
有更好的想法吗?
onScrollListener
。setOnScrollListener(this);
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem == 0){
//do stuff here
}
}
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);
}
}
}
});
希望这能帮到你,对我很有效,祝好运。
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", "第一个视图的 Y 坐标是 " + y);
if(y == 0) {
// 做你想做的
}
}
}
}
getChildAt(0)
方法会返回 GridView 中第一个可见的项,但我猜这不是你想要的。
如果你使用 yourGridView.getFirstVisiblePosition()
方法,它会返回你的数据适配器中第一个可见位置,这才是你想要的。