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.****.net/download/qq_28767927/10468668