private void completeScroll(boolean postEvents) {
        boolean needPopulate = mScrollState == SCROLL_STATE_SETTLING;
        if (needPopulate) {
            // Done with scroll, no longer want to cache view drawing.
            setScrollingCacheEnabled(false);
            mScroller.abortAnimation();
            int oldX = getScrollX();
            int oldY = getScrollY();
            int x = mScroller.getCurrX();
            int y = mScroller.getCurrY();
            if (oldX != x || oldY != y) {
                scrollTo(x, y);
            }
        }
        mPopulatePending = false;
        for (int i=0; i<mItems.size(); i++) {
            ItemInfo ii = mItems.get(i);
            if (ii.scrolling) {
                needPopulate = true;
                ii.scrolling = false;
            }
        }
        if (needPopulate) {
            if (postEvents) {
                ViewCompat.postOnAnimation(this, mEndScrollRunnable);
            } else {
                mEndScrollRunnable.run();
            }
        }
    }
This method will be invoked when the current page is scrolled, either as part
of a programmatically initiated smooth scroll or a user initiated touch scroll.
If you override this method you must call through to the superclass implementation
(e.g. super.onPageScrolled(position, offset, offsetPixels)) before onPageScrolled
returns.

@param position Position index of the first page currently being displayed.
                Page position+1 will be visible if positionOffset is nonzero.
@param offset Value from [0, 1) indicating the offset from the page at position.
@param offsetPixels Value in pixels indicating the offset from position.
library/src/main/java/com/daimajia/slider/library/Tricks/ViewPagerEx.java