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

CustomSlidingTabLayout和SlidingTabLayout是两个自定义的HorizontalScrollView子类,用于实现ViewPager的页面指示器。它们都包含方法`scrollToCurrentTab()`,确保当前选中的标签在视图中居中显示。此方法通过计算当前位置的偏移量,并结合HorizontalScrollView的scrollTo()方法来滚动到正确的位置。这两个类对于Android应用的UI交互优化具有重要意义。

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);
        }
    }
HorizontalScrollView 是 Android 中的一个视图组件,用于水平滚动显示内容。如果你想让 HorizontalScrollView 滚动到指定的子项,通常你需要以下几个步骤: 1. **获取 Scroll View 和 Child Views**: 首先,你需要找到 HorizontalScrollView 对象,并获取其包含的所有子 view。你可以通过 `findViewByTag()` 或者遍历 `scrollview.getChildAt()` 来获取。 ```java HorizontalScrollView scrollView = findViewById(R.id.horizontalscrollView); LinearLayout layout = (LinearLayout) scrollView.getChildAt(index); // index 是你想滚动到的子项位置 ``` 2. **测量并计算滚动偏移量**: 计算目标子项的位置相对于 HorizontalScrollView 的起始点所需要的滚动距离。这通常涉及到对子项的宽度和已知的滚动容器尺寸的计算。 ```java int itemWidth = layout.getWidth(); int scrollOffset = itemWidth * index; // 按照子项宽度来计算滚动位置 ``` 3. **设置滚动视图**: 使用 `smoothScrollTo()` 方法平滑地滚动到指定位置。如果需要动画效果,可以传递一个时间参数;如果没有动画需求,可以传入 `0`。 ```java scrollView.smoothScrollTo(0, scrollOffset); ``` 4. **处理边界情况**: 确保不会因为滚动超出范围而出现问题,可以在滚动之前检查当前滚动位置以及目标位置是否超出可视区域。 ```java if (scrollOffset < 0 || scrollOffset > scrollView.getWidth() - layout.getWidth()) { // 调整滚动位置到合适的范围内 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值