1、CustomSlidingTabLayout
public class CustomSlidingTabLayout extends HorizontalScrollView implements ViewPager.OnPageChangeListener {}
HorizontalScrollView滚到当前tab,并且居中显示
/**
* HorizontalScrollView滚到当前tab,并且居中显示
*/
private void scrollToCurrentTab() {
if (mAdapter.getTabItemCount() <= 0) {
return;
}
int tabItemPosition = mAdapter.getTabItemPositionByPagePosition(mCurrentPage);
int offset = (int) (mCurrentPositionOffset * mTabsContainer.getChildAt(tabItemPosition).getWidth());
/**当前Tab的left+当前Tab的Width乘以positionOffset*/
int newScrollX = mTabsContainer.getChildAt(tabItemPosition).getLeft() + offset;
if (mCurrentPage > 0 || offset > 0) {
/**HorizontalScrollView移动到当前tab,并居中*/
newScrollX -= getWidth() / 2 - getPaddingLeft();
calcIndicatorRect();
newScrollX += ((mTabRect.right - mTabRect.left) / 2);
}
if (newScrollX != mLastScrollX) {
mLastScrollX = newScrollX;
/** scrollTo(int x,int y):x,y代表的不是坐标点,而是偏移量
* x:表示离起始位置的x水平方向的偏移量
* y:表示离起始位置的y垂直方向的偏移量
*/
scrollTo(newScrollX, 0);
}
}
2、SlidingTabLayout
public class SlidingTabLayout extends HorizontalScrollView implements ViewPager.OnPageChangeListener {}
HorizontalScrollView滚到当前tab,并且居中显示:
/**
* HorizontalScrollView滚到当前tab,并且居中显示
*/
private void scrollToCurrentTab() {
if (mTabCount <= 0) {
return;
}
int offset = (int) (mCurrentPositionOffset * mTabsContainer.getChildAt(mCurrentTab).getWidth());
/**当前Tab的left+当前Tab的Width乘以positionOffset*/
int newScrollX = mTabsContainer.getChildAt(mCurrentTab).getLeft() + offset;
if (mCurrentTab > 0 || offset > 0) {
/**HorizontalScrollView移动到当前tab,并居中*/
newScrollX -= getWidth() / 2 - getPaddingLeft();
calcIndicatorRect();
newScrollX += ((mTabRect.right - mTabRect.left) / 2);
}
if (newScrollX != mLastScrollX) {
mLastScrollX = newScrollX;
/** scrollTo(int x,int y):x,y代表的不是坐标点,而是偏移量
* x:表示离起始位置的x水平方向的偏移量
* y:表示离起始位置的y垂直方向的偏移量
*/
scrollTo(newScrollX, 0);
}
}