private void removeNonVisibleItems(final int dx) {
    View child = getChildAt(0);
    while (child != null && child.getRight() + dx <= 0) {
      mDisplayOffset += child.getMeasuredWidth();
      mRemovedViewQueue.offer(child);
      removeViewInLayout(child);
      mLeftViewIndex++;
      if (mGraphListener != null && child != null) mGraphListener.viewRemoved(child);
      child = getChildAt(0);
    }

    child = getChildAt(getChildCount() - 1);
    while (child != null && child.getLeft() + dx >= getWidth()) {
      mRemovedViewQueue.offer(child);
      removeViewInLayout(child);
      mRightViewIndex--;
      if (mGraphListener != null && child != null) mGraphListener.viewRemoved(child);
      child = getChildAt(getChildCount() - 1);
    }
  }