• 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
  • 相关阅读:
    JVM调优建议
    关于JSON对象和前端js对象
    Xilinx FPGA 使用Microblaze实现串口命令行
    计算机组成原理 | 数据的表示、运算和校验(3)数据处理与存储
    JSON.toJSONString首字母大小写问题
    gcc -static参数
    GoLong的学习之路(番外)如何使用依赖注入工具:wire
    学习记录——ipv4、ipv6与ip、DNS、网络协议
    通过Demo学WPF—数据绑定(二)
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的定制旅游APP[包运行成功]SSM毕业设计安卓项目源码
  • 原文地址:https://blog.csdn.net/zhijiandedaima/article/details/128012608