RecyclerView滑动距离计算(包含header的情况)
刚开始有个需求是要求首页滑动到某个位置的时候 要置顶页面中间的一个标题栏,因为项目比较着急 于是想使用比较简单显示隐藏处理。但是发现了如下问题:刚开始没考虑到有header的情况,使用如下方法:public int getScollYDistance() {LinearLayoutManager layoutManager = (LinearLayoutManager)...
·
刚开始有个需求是要求首页滑动到某个位置的时候 要置顶页面中间的一个标题栏,因为项目比较着急 于是想使用比较简单显示隐藏处理。
但是发现了如下问题:
刚开始没考虑到有header的情况,使用如下方法:
public int getScollYDistance() {
LinearLayoutManager layoutManager = (LinearLayoutManager) this.getLayoutManager();
int position = layoutManager.findFirstVisibleItemPosition();
View firstVisiableChildView = layoutManager.findViewByPosition(position);
int itemHeight = firstVisiableChildView.getHeight();
return (position) * itemHeight - firstVisiableChildView.getTop();
}
发现一个问题 每次滑动到header看不到的时候就出现计算距离不准确的情况。
经过一番查询,终于发现问题就是header导致的,于是修改方法,得到如下放法:亲测可用
private int headerHeight;
private int getScrollY() {
LinearLayoutManager layoutManager = (LinearLayoutManager) homeRv.getLayoutManager();
// 获取第一个可见item的位置
int position = layoutManager.findFirstVisibleItemPosition();
if (position == 0) {
// 获取header
View headerView = layoutManager.findViewByPosition(0);
// 获取第一个可见item的高度
headerHeight = headerView.getHeight();
}
// 获取第一个可见item
View firstVisiableChildView = layoutManager.findViewByPosition(position);
// 获取第一个可见item的高度
int itemHeight = firstVisiableChildView.getHeight();
// 获取第一个可见item的位置
int iResult = 0;
if (position == 0) {
iResult = (position) * itemHeight - firstVisiableChildView.getTop();
} else {
iResult = (position) * itemHeight - firstVisiableChildView.getTop() + headerHeight;
}
return iResult;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)