How to find percentage of each visible item in recycleview

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


        
4条回答
  •  南方客
    南方客 (楼主)
    2020-12-31 20:36

    Here is more improved and less complex (more effective, less memory usage, less code) in kotlin.

    No need do compare item rect with recycler view rect

    recycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
            val layoutManager = recycler.layoutManager as LinearLayoutManager
            val firstPosition = layoutManager.findFirstVisibleItemPosition()
            val lastPosition = layoutManager.findLastVisibleItemPosition()
    
           val globalVisibleRect = Rect()
           recycler.getGlobalVisibleRect(globalVisibleRect)
           for (pos in firstPosition..lastPosition) {
              val view = layoutManager.findViewByPosition(pos)
              if (view != null) {
                  val percentage = getVisibleHeightPercentage(view)
              }
           }
       }
    
        //Method to calculate how much of the view is visible
        private fun getVisibleHeightPercentage(view: View): Double {
    
            val itemRect = Rect()
            val isParentViewEmpty = view.getLocalVisibleRect(itemRect)
    
           // Find the height of the item.
           val visibleHeight = itemRect.height().toDouble()
           val height = view.getMeasuredHeight()
    
           val viewVisibleHeightPercentage = visibleHeight / height * 100
    
           if(isParentViewEmpty){
              return viewVisibleHeightPercentage
           }else{
               return 0.0
            }
         }
    })
    

提交回复
热议问题