在 recyclerview 中找到第一个完全可见的元素

Find first completely visible element in recyclerview

我有一个具有视差效果的布局。所以这是其中的元素 -

  1. AppBarLayout
  2. CollapsingToolbarLayout 里面 AppBarLayout
  3. Toolbar 里面 CollapsingToolbarLayout
  4. 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 中可见,需要上述逻辑。