Android IndicatorView的灵感来源于SlidingTabView,虽然有句“不重复”造轮子在先,本着练手的目的,仍是写了一个功能较为简单的相似view。
其比SlidingTabView在功能上欠缺的一点是:暂时没有添加“当内容显示不开时自动向左右滑动”的功能。java
能够胜任一屏显示全部tab标题的状况。android
全部效果如上图所示git
compile 'cn.carbs.android:IndicatorView:1.0.1'
SimpleIndicatorView和IndicatorView采用了两种不一样的属性,缘由是二者差距稍大,索性采用两套属性。因为属性较多,所以xml中的声明稍微复杂。之因此写了两个view,是由于竖直方向显示时,通常没有文字描述,另外SimpleIndicatorView较为轻量化,便于下降耦合。github
1.对于IndicatorView,xml中这样声明:app
<cn.carbs.android.indicatorview.library.IndicatorView android:id="@+id/indicator_view" android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginTop="20dp" android:background="#ffeeeeee" android:paddingLeft="2dp" android:paddingRight="2dp" app:iv_IndicatorColorEnd="#ffee5544" app:iv_IndicatorColorGradient="true" app:iv_IndicatorColorStart="#ff3388ff" app:iv_IndicatorEven="false" app:iv_IndicatorLengthExtra="3dp" app:iv_IndicatorTextArray="@array/text_arrays_2" app:iv_IndicatorTextGap="20dp" app:iv_IndicatorTextSize="20dp"/>
2.对于SimpleIndicatorView,xml中这样声明:ide
<cn.carbs.android.indicatorview.library.SimpleIndicatorView android:id="@+id/simple_indicator_view_v" android:layout_width="4dp" android:layout_height="match_parent" android:layout_alignParentLeft="true" app:iv_SimpleIndicatorColorEnd="#ffee5544" app:iv_SimpleIndicatorColorGradient="true" app:iv_SimpleIndicatorColorStart="#ff3388ff" app:iv_SimpleIndicatorCount="4" app:iv_SimpleIndicatorLinePosition="start" app:iv_SimpleIndicatorOrientation="vertical" app:iv_SimpleIndicatorWidthRation="0.8"/>
各个属性做用,见说明末尾。函数
若是想和ViewPager联动,那么Java代码只有一句:布局
mIndicatorView.setViewPager(mViewpager);
若是想主动改变其显示的索引值,可经过多种方式:动画
//使IndicatorView当前指示的索引值加1 mIndicatorView.increaseSelectedIndexWithViewPager(); //使IndicatorView当前指示的索引值减1 mIndicatorView.decreaseSelectedIndexWithViewPager(); //使IndicatorView指向任意的索引值 mIndicatorView.setIndexWithViewPager(int indexDest);
IndicatorView状态改变后的回调函数:3d
mIndicatorView.setOnIndicatorChangedListener(new IndicatorView.OnIndicatorChangedListener() { @Override public void onIndicatorChanged(int oldSelectedIndex, int newSelectedIndex) { //若是已经和ViewPager关联了,那么不要在此处改变ViewPager的状态 } });
<declare-styleable name="IndicatorView"> <attr name="iv_IndicatorEven" format="reference|boolean" /> //每一个单元是不是等宽的 <attr name="iv_IndicatorColor" format="reference|color" /> //indicator的颜色 <attr name="iv_IndicatorColorStart" format="reference|color" /> //indicator的起始颜色,indicator的颜色随着滑动而进行改变,iv_IndicatorColorGradient属性开启后有效 <attr name="iv_IndicatorColorEnd" format="reference|color" /> //indicator的终止颜色,iv_IndicatorColorGradient属性开启后有效 <attr name="iv_IndicatorColorGradient" format="reference|boolean" />//是否容许indicator随着滑动而改变颜色 <attr name="iv_IndicatorTextGap" format="reference|dimension" /> //每一个text之间的间距,在单元非等宽的条件下有效(iv_IndicatorEven="false") <attr name="iv_IndicatorTextArray" format="reference" />//显示的tab标题 <attr name="iv_IndicatorTextSize" format="reference|dimension" />//显示的tab标题的文字大小 <attr name="iv_IndicatorTextColorNormal" format="reference|color" />//显示的tab标题的非选中状态文字颜色(iv_IndicatorColorGradient="false"条件下有效) <attr name="iv_IndicatorTextColorSelected" format="reference|color" />//显示的tab标题的选中状态文字颜色(iv_IndicatorColorGradient="false"条件下有效) <attr name="iv_IndicatorLengthExtra" format="reference|dimension" />//indicator长于每一个tab标题的长度的一半 <attr name="iv_IndicatorDuration" format="reference|integer" />//indicator切换时的动画持续时间 <attr name="iv_IndicatorSelectedIndex" format="reference|integer" />//默认的选中索引 <attr name="iv_IndicatorHeight" format="reference|dimension" />//indicator的高度 <attr name="iv_IndicatorBgTouchedColor" format="reference|color" />//按下某个tab标题时的背景颜色 <attr name="iv_IndicatorViewPagerAnim" format="reference|boolean" />//按下tab后,与之联动的ViewPager是否须要有动画效果,默认true </declare-styleable>
<declare-styleable name="SimpleIndicatorView"> <attr name="iv_SimpleIndicatorColor" format="reference|color" />//indicator的颜色 <attr name="iv_SimpleIndicatorColorStart" format="reference|color" />//indicator的起始颜色,indicator的颜色随着滑动而进行改变,iv_IndicatorColorGradient属性开启后有效 <attr name="iv_SimpleIndicatorColorEnd" format="reference|color" />//indicator的终止颜色,iv_IndicatorColorGradient属性开启后有效 <attr name="iv_SimpleIndicatorColorGradient" format="reference|boolean" />//是否容许indicator随着滑动而改变颜色 <attr name="iv_SimpleIndicatorCount" format="reference|integer" />//一共包含的单元数目 <attr name="iv_SimpleIndicatorWidthRation" format="reference|float" />//indicator宽度与均分的单元的宽度比值 <attr name="iv_SimpleIndicatorDuration" format="reference|integer" />//indicator切换时的动画持续时间 <attr name="iv_SimpleIndicatorDefaultIndex" format="reference|integer" />//默认的选中索引 <attr name="iv_SimpleIndicatorLineColor" format="reference|color" />//底部的线条的颜色 <attr name="iv_SimpleIndicatorLineShow" format="reference|boolean" />//底部线条是否显示 <attr name="iv_SimpleIndicatorLineThickness" format="reference|dimension" />//底部线条的高度 <attr name="iv_SimpleIndicatorOrientation" format="enum">//indicator水平显示仍是竖直显示 <enum name="horizontal" value="0" /> <enum name="vertical" value="1" /> </attr> <attr name="iv_SimpleIndicatorLinePosition" format="enum">//底部线条的位置:水平方向,能够在顶部,能够在底部。竖直方向,能够在左侧,能够在右侧。 <enum name="start" value="0" /> <enum name="end" value="1" /> </attr> </declare-styleable>
添加“点击item后,自动调整到合适位置,可显示超过一屏的tab”的功能