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

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

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



但是产品经理要求每次点击边上的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值