@Override
public final void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
centerItemPosition = IDLE_POSITION;
if (!(parent.getLayoutManager() instanceof LinearLayoutManager)) return;
LinearLayoutManager llm = (LinearLayoutManager) parent.getLayoutManager();
boolean isVertical = llm.getOrientation() == LinearLayoutManager.VERTICAL;
Rect parentRect = new Rect(parent.getLeft(), parent.getTop(), parent.getRight(), parent.getBottom());
int startPosition = llm.findFirstVisibleItemPosition();
if (startPosition < 0) return;
int endPosition = llm.findLastVisibleItemPosition();
hasCenterItem = false;
for (int itemPosition = startPosition; itemPosition <= endPosition; itemPosition++) {
if (itemPosition < itemCount) continue;
if (itemPosition >= llm.getItemCount() - itemCount) break;
View itemView = llm.findViewByPosition(itemPosition);
Rect itemRect = new Rect(itemView.getLeft(), itemView.getTop(), itemView.getRight(), itemView.getBottom());
if (isVertical) {
drawVerticalItem(c, itemRect, itemPosition, translateX(parentRect), parentRect.exactCenterY());
} else {
drawHorizontalItem(c, itemRect, itemPosition, parentRect.exactCenterX(), parentRect.exactCenterY());
}
}
drawDivider(c, parentRect, isVertical);
}