0

시차 효과가있는 레이아웃이 있습니다.recyclerview에서 첫 번째 완전히 보이는 요소 찾기

  1. AppBarLayout
  2. CollapsingToolbarLayout이 모든 전망 RecyclerView

  • CollapsingToolbarLayout 내부 AppBarLayout
  • Toolbar 내부 CoordinatorLayout 내에있는 - 그래서 그것의 요소입니다. 이제 RecyclerView의 첫 번째 완전히 눈에 띄는 항목이 무엇인지 알아야합니다. 일반적으로 다음과 같은 논리를 사용했습니다. -

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

    그러나 여기서 0 번째 위치가 완전히 보이지 않을 때 나는 많은 것을 얻고 있습니다.

  • 답변

    0

    나는 그것을 스스로 발견했다. 내가 AppBarLayout을 사용하고 있기 때문에 특정 화면에서 특정 화면을 볼 수 있는지 여부를 확인해야합니다. 내가 한

    이다 : 나는 수직 1.

    이후

    는, 오프셋 내가하여 곱한 스크롤하는 동안 마이너스 값이되는 특정 위치에 해결할 싶었 기 때문에

    @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. 그런 다음 오프셋과 내가 찾고있는 뷰의 맨 위가 같은지 아닌지를 그냥 확인합니다.

    따라서 화면에 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'으로 만들어야한다는 것입니다. –