• HorizontalScrollView滚到当前tab,并且居中显示


    1、CustomSlidingTabLayout

    public class CustomSlidingTabLayout extends HorizontalScrollView implements ViewPager.OnPageChangeListener {}
    
    • 1

    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);
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2、SlidingTabLayout

    public class SlidingTabLayout extends HorizontalScrollView implements ViewPager.OnPageChangeListener {}
    
    • 1

    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);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    【持续更新】tutorial-Linux-Markdown-etc(Linux、命令、Markdown、md、Tex、LaTex)
    【微服务 Spring Cloud 6】服务如何拆分?使用微服务的注意事项?
    PowerBI_一分钟了解POWERBI计算组_基础运用篇(环同比分析)
    go语言 | 图解反射(一)
    20. 数据库操作
    Python程序员常犯的编码错误(三)
    React重新渲染指南
    Kettle工具使用小结1
    Java后端开发(九)-- idea(2022版)将commit(未push)的 本地仓库 的 多条commit记录 进行撤销
    多线程与高并发实战第三节
  • 原文地址:https://blog.csdn.net/zhijiandedaima/article/details/128012608