0

視差のあるレイアウトがあります。recyclerviewで完全に可視の要素を見つけよう

  1. AppBarLayout
  2. CollapsingToolbarLayoutすべてこのビューRecyclerView

  • CollapsingToolbarLayout内部 AppBarLayout
  • ToolbarCoordinatorLayout内にある - これはこれで要素です。今度は最初に完全に目に見えるものがRecyclerViewであることを知る必要があります。

    int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition(); 
    

    しかし、たとえ0番目の位置が完全に表示されていないとき、ここで私は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); 
         } 
        } 
    

    私は1

    である特定の位置を回避したかったので、私はrecyclerView.getLayoutManager().getChildAt(1);を使用し、垂直オフセット、以来、私はでそれを掛けスクロールしながらマイナス値となり - 1。次に、私が探しているビューのオフセットとトップが同じかどうかをチェックします。

    したがって、画面内でparallaxの効果を使用しているときに、同時にどのビューが表示されるかを確認する必要があります。RecyclerViewには、上記のロジックが必要です。

    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); 
        } 
    } 
    
    +0

    私はこの解決策をどこか別のところで見てきました。それは私のために働いていない。私がする必要があるのは、一番下のビューが固定されていて、同じビューが 'RecyclerView'から完全に見えるようになってから' View.GONE'にする必要があり、スクロールの更新が正しく行われていないということです。 –

    関連する問題