Android导航栏tab每次点击只展示下一个

之前项目赶进度,所以去网上找了HorizontalNavigationBar这个demo,有需要的可以自行百度。

突然觉得我的小学语文不好描述这个效果,还是直接上效果图吧

Android导航栏tab每次点击只展示下一个


但是产品经理要求每次点击边上的tab只展示下一个tab,想想还是有道理(毕竟产品是我大哥),所以就自行改了一下内部计算的方法,然后写个博客,算是自己做个笔记好了。

核心方法就是下面的

public void setCurrentChannelItem(int index) {
    int childCount = this.mItemViewContainer.getChildCount();
    if (index > childCount - 1) {
        throw new RuntimeException("position more size");
    }
    if (index == this.mCurrentPosition) {
        return;
    }
    this.mCurrentPosition = index;
    for (int i = 0; i < childCount; i++) {
        HorizontalNavigationItemView itemView = (HorizontalNavigationItemView) this.mItemViewContainer.getChildAt(i);
        itemView.setChecked(i == mCurrentPosition);
    }
    if (mCurrentPosition == 0) {
        scrollTo(0, 0);
    }else if (mCurrentPosition >= childCount - 2) {
        scrollTo(this.mItemViewContainer.getChildAt(index).getLeft(), 0);
    }else if (mCurrentPosition < 2){
        scrollTo(0, 0);
    }
    else {
        int right = this.mItemViewContainer.getChildAt(index - 2).getRight();
        int left = this.mItemViewContainer.getChildAt(index+ 2).getLeft();
        if (childPosition < index) {//向右点击
            if (leftIndex <= left - getMeasuredWidth()) {//向右滑动
                smoothScrollTo(left - getMeasuredWidth(), 0);
            }
        }else {//向左点击
       if (right < leftIndex) {//向左滑动
                smoothScrollTo(right, 0);
            }
        }
    }
    childPosition = index;
}

demo链接:https://download.csdn.net/download/qq_28767927/10468668