我有一个具有视差效果的布局。所以这是其中的元素 -
AppBarLayout
CollapsingToolbarLayout
内AppBarLayout
在Toolbar
CollapsingToolbarLayout
RecyclerView
所有这些观点都在CoordinatorLayout
之内。现在我需要找出RecyclerView
中第一个完全可见的项目。通常我使用以下逻辑来获取它 -
int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
但是,即使第0个位置不完全可见,我也会得到很多1。
答案 0 :(得分:0)
getChildAt从第一个可见位置开始,而不是在适配器的位置。
以下是生成的代码。
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
View v = layoutManager.getChildAt(0);
if (firstVisiblePosition > 0 && v != null) {
int offsetTop = v.getTop();
chatAdapter.notifyDataSetChanged();
if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) {
layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop);
}
}
答案 1 :(得分:0)
我自己找到了。当我使用AppBarLayout
时,我需要检查特定视图是否在该特定滚动屏幕上可用。
我做的是:
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
View v = recyclerView.getLayoutManager().getChildAt(1);
int offset = 0;
if (v != null) {
offset = v.getTop();
}
if ((verticalOffset * -1) >= offset) {
layoutBuy.setVisibility(View.GONE);
} else {
layoutBuy.setVisibility(View.VISIBLE);
}
}
我使用了recyclerView.getLayoutManager().getChildAt(1);
因为我想解决那个特定的位置,即1。
因为,垂直偏移变为负值,而滚动I乘以-1。然后检查我正在寻找的视图的偏移和顶部是否相同。
因此,在屏幕中使用parallax
效果时,需要检查RecyclerView
中哪个视图可见,需要上述逻辑。