recyclerview中列表一般使用LinearLayoutManage,其中LinearLayoutManage有方法findviewbyposition(position);和findFirstVisibleItemPosition,他可以分别用来获取你指定position的view和第一个显示的item的位置.这是前提.
下面我们来说说思想:
1.我们建立一个布局文件,里边放recyclerview然后上边盖一个header.
2.我们的item布局中在正常需要的布局上添加一个header.和activity的header布局一样就行,可以建一个header布局直接include.
3.正常写好recyclerview直到能正常显示出来
4.写recyclerview.addOnScrollListener,在onScrolled中判断.下面我们看代码
mRecyclerList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//headerBarHeight 用suspension_bar来赋值获取到header的高度
headerBarHeight = suspension_bar.getHeight();
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取到当前显示第一个view的position的下一个view
View view = linearLayoutManager.findViewByPosition(currentPosition + 1);
if(view != null){
//判断如果gettop小于header的高度那么就设置header的Y偏移量
if(view.getTop() <= headerBarHeight){
suspension_bar.setY(-(headerBarHeight - view.getTop()));
}else{
//不然就设置偏移量为0,正常显示header
suspension_bar.setY(0);
}
}
//currentPosition 为当前显示position
if(currentPosition != linearLayoutManager.findFirstVisibleItemPosition()){
currentPosition = linearLayoutManager.findFirstVisibleItemPosition();
suspension_bar.setY(0);
//下面要添加更换header上控件值的方法
updateHeader();
}
}
});
//下面要添加更换header上控件值的方法
updateHeader();
}
主要代码就这些,其他的和正常写recyclerview没什么区别.