How to find percentage of each visible item in recycleview

后端 未结 4 1794
忘了有多久
忘了有多久 2020-12-31 20:15
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
         


        
4条回答
  •  [愿得一人]
    2020-12-31 20:42

    Override the ScrollChangedListener of recyclerview and add below code in onScollerdChanged, to get the visibility of your row.

               if (rvPercentage != null){
                    LinearLayoutManager layoutManager = ((LinearLayoutManager) rvPercentage.getLayoutManager());
    
                    final int firstPosition = layoutManager.findFirstVisibleItemPosition();
                    final int lastPosition = layoutManager.findLastVisibleItemPosition();
    
                    Rect rvRect = new Rect();
                    rvPercentage.getGlobalVisibleRect(rvRect);
    
                    for (int i = firstPosition; i <= lastPosition; i++) {
                        Rect rowRect = new Rect();
                        layoutManager.findViewByPosition(i).getGlobalVisibleRect(rowRect);
    
                        int percentFirst;
                        if (rowRect.bottom >= rvRect.bottom){
                            int visibleHeightFirst =rvRect.bottom - rowRect.top;
                            percentFirst = (visibleHeightFirst * 100) / layoutManager.findViewByPosition(i).getHeight();
                        }else {
                            int visibleHeightFirst = rowRect.bottom - rvRect.top;
                            percentFirst = (visibleHeightFirst * 100) / layoutManager.findViewByPosition(i).getHeight();
                        }
    
                        if (percentFirst>100)
                            percentFirst = 100;
    
                        mData.get(i).setPercentage(percentFirst);
                        mAdapter.notifyItemChanged(i);
                    }
                }
    

    It gives you below output:

提交回复
热议问题