private void recomputeScrollPosition(int width, int oldWidth, int margin, int oldMargin) {
if (oldWidth > 0 && !items.isEmpty()) {
final int widthWithMargin = width - getPaddingLeft() - getPaddingRight() + margin;
final int oldWidthWithMargin = oldWidth - getPaddingLeft() - getPaddingRight()
+ oldMargin;
final int xpos = getScrollX();
final float pageOffset = (float) xpos / oldWidthWithMargin;
final int newOffsetPixels = (int) (pageOffset * widthWithMargin);
scrollTo(newOffsetPixels, getScrollY());
if (!scroller.isFinished()) {
final int newDuration = scroller.getDuration() - scroller.timePassed();
ItemInfo targetInfo = infoForPosition(currentItem);
if (targetInfo != null) {
scroller.startScroll(newOffsetPixels, 0, (int) (targetInfo.offset * width), 0, newDuration);
}
}
} else {
final ItemInfo ii = infoForPosition(currentItem);
final float scrollOffset = ii != null ? Math.min(ii.offset, lastOffset) : 0;
final int scrollPos = (int) (scrollOffset * (width - getPaddingLeft() - getPaddingRight()));
if (scrollPos != getScrollX()) {
completeScroll(false);
scrollTo(scrollPos, getScrollY());
}
}
}