在 recyclerview 中找到第一个完全可见的元素
Find first completely visible element in recyclerview
我有一个具有视差效果的布局。所以这是其中的元素 -
AppBarLayout
CollapsingToolbarLayout
里面 AppBarLayout
Toolbar
里面 CollapsingToolbarLayout
RecyclerView
所有这些视图都在 CoordinatorLayout
内。现在我需要找出 RecyclerView
的第一个完全可见的项目是什么。通常我使用以下逻辑来获取它 -
int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
但是这里我得到了很多 1,即使第 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);
}
}
我自己找的。当我使用 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.
因为滚动时垂直偏移变成负值我将它乘以-1。然后检查我正在寻找的视图的偏移量和顶部是否相同。
因此,在屏幕中使用 parallax
效果时,同时需要检查哪个视图在 RecyclerView
中可见,需要上述逻辑。
我有一个具有视差效果的布局。所以这是其中的元素 -
AppBarLayout
CollapsingToolbarLayout
里面AppBarLayout
Toolbar
里面CollapsingToolbarLayout
RecyclerView
所有这些视图都在 CoordinatorLayout
内。现在我需要找出 RecyclerView
的第一个完全可见的项目是什么。通常我使用以下逻辑来获取它 -
int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
但是这里我得到了很多 1,即使第 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);
}
}
我自己找的。当我使用 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.
因为滚动时垂直偏移变成负值我将它乘以-1。然后检查我正在寻找的视图的偏移量和顶部是否相同。
因此,在屏幕中使用 parallax
效果时,同时需要检查哪个视图在 RecyclerView
中可见,需要上述逻辑。