简介
1.当需求需要下拉刷新时,在Activity布局中添加一个和adapter布局一样的悬浮框布局,在代码中显示隐藏控制;
2.当需求没有下拉刷新时,就简单了,直接在adapter布局中定义一个悬浮框布局就可以了;
效果图
代码如下:
private int mSuspensionHeight;
private int mCurrentPosition = 0;
tvHeader:Activity布局中的tv;
mSuspensionBar: activity 布局中的悬浮框Layout;
recyclerView.addOnScrollListener(new RecyclerViewListener());
class RecyclerViewListener extends RecyclerView.OnScrollListener{
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
mSuspensionHeight = mSuspensionBar.getHeight();
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
View viewPosition = mLinearLayoutManager.findViewByPosition(mCurrentPosition);
/**
*处理position为0的情况
*/
if (viewPosition != null) {
if (viewPosition.getTop() == 0 && mLinearLayoutManager.findFirstVisibleItemPosition() == 1
|| dy == 0 && mLinearLayoutManager.findFirstVisibleItemPosition() == 0) {
tvHeader.setVisibility(View.GONE);
return;
}
}
tvHeader.setVisibility(View.VISIBLE);
if (显示悬浮框布局的判断条件) {
View view = mLinearLayoutManager.findViewByPosition(mCurrentPosition + 1);
if (view != null) {
if (view.getTop() <= mSuspensionHeight) {
mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));
} else {
mSuspensionBar.setY(0);
}
}
}
if (mCurrentPosition != mLinearLayoutManager.findFirstVisibleItemPosition()) {
mCurrentPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
mSuspensionBar.setY(0);
tvHeader.setText(”赋值“);
}
}
}