private void recycleTopInvisibleViews(RecyclerView.Recycler recycler){
  final int childCount=getChildCount();
  for (int i=0; i <= childCount; i++) {
    View child=getChildAt(i);
    if (getDecoratedEnd(child) > topBorder) {
      recycleChildren(recycler,0,i - 1);
      firstAttachedItemPosition+=i;
      updateSpanTopParameters();
      return;
    }
    int heightNum=itemLayoutHeightCache.get(firstAttachedItemPosition + i);
    for (int j=0; j < itemLayoutWidthCache.get(firstAttachedItemPosition + i); j++) {
      int spanIndex=itemOccupiedStartSpan.get(firstAttachedItemPosition + i) + j;
      spanTop[spanIndex]+=heightNum * sizePerSpan;
    }
  }
}

private void recycleTopInvisibleViews ( RecyclerView . Recycler recycler ) { final int childCount = getChildCount ( ) ; for ( int i = 0 ; i <= childCount ; i ++ ) { View child = getChildAt ( i ) ; if ( getDecoratedEnd ( child ) > topBorder ) { recycleChildren ( recycler , 0 , i - 1 ) ; firstAttachedItemPosition += i ; updateSpanTopParameters ( ) ; return ; } int heightNum = itemLayoutHeightCache . get ( firstAttachedItemPosition + i ) ; for ( int j = 0 ; j < itemLayoutWidthCache . get ( firstAttachedItemPosition + i ) ; j ++ ) { int spanIndex = itemOccupiedStartSpan . get ( firstAttachedItemPosition + i ) + j ; spanTop [ spanIndex ] += heightNum * sizePerSpan ; } } }
recycle views out of the top border .
