code: private void recycleViewsFromEnd(RecyclerView.Recycler recycler, int dt) {
          final int childCount = getChildCount();
          if (dt < 0) {
              if (DEBUG) {
                  Log.d(TAG, "Called recycle from end with a negative value. This might happen"
                          + " during layout changes but may be sign of a bug");
              }
              return;
          }
          final int limit = mOrientationHelper.getEndAfterPadding() - dt;
          if (mShouldReverseLayout) {
              for (int i = 0; i < childCount; i++) {
                  View child = getChildAt(i);
                  if (mOrientationHelper.getDecoratedStart(child) < limit) {// stop here
                      recycleChildren(recycler, 0, i);
                      return;
                  }
              }
          } else {
              for (int i = childCount - 1; i >= 0; i--) {
                  View child = getChildAt(i);
                  if (mOrientationHelper.getDecoratedStart(child) < limit) {// stop here
                      recycleChildren(recycler, childCount - 1, i);
                      return;
                  }
              }
          }
  
      }
docs: Recycles views that went out of bounds after scrolling towards the start of the layout.
  
  @param recycler Recycler instance of {@link com.twotoasters.android.support.v7.widget.RecyclerView}
  @param dt       This can be used to add additional padding to the visible area. This is used
  to detect children that will go out of bounds after scrolling, without
  actually moving them.