Android自定义View之IndicatorView,显示当前tab页所处位置的View

概述

Android IndicatorView的灵感来源于SlidingTabView,虽然有句“不重复”造轮子在先,本着练手的目的,还是写了一个功能较为简单的类似view。其比SlidingTabView在功能上欠缺的一点是:暂时没有添加“当内容显示不开时自动向左右滑动”的功能。

应用场景

可以胜任一屏显示所有tab标题的情况。

效果图

所有效果如上图所示

Android自定义View之IndicatorView,显示当前tab页所处位置的View_第1张图片
左侧图片为所有效果的截图包括IndicatorView和SimpleIndicatorView,右侧图片为SimpleIndicatorView单独示例。

功能

  1. 可与ViewPager联动;
  2. 均等Indicator显示;
  3. 不均等Indicator显示,根据tab标题的字宽度自动适配;
  4. Indicator可以添加indicator两端相对多增加的长度;
  5. 可以设置颜色渐变,一般可用来做tab切换,增加美感;
  6. 文字也可以随Indicator的颜色变化而变化,具有渐变效果;
  7. SimpleIndicatorView可以设置indicator的宽度相对每个等长单元的宽度比值;
  8. SimpleIndicatorView可以设置滑动方向,即水平方向或者竖直方向,同时可以设置底部线条的位置;
  9. 可首尾循环;
  10. 支持padding,支持自定义点击效果等;
  11. 可一同设置文字;

加入项目

    compile 'cn.carbs.android:IndicatorView:1.0.1'

使用方法

xml布局文件中声明:

SimpleIndicatorView和IndicatorView采用了两种不同的属性,原因是两者差距稍大,索性采用两套属性。由于属性较多,因此xml中的声明稍微复杂。之所以写了两个view,是因为竖直方向显示时,一般没有文字描述,另外SimpleIndicatorView较为轻量化,便于降低耦合。
1.对于IndicatorView,xml中这样声明:

  

2.对于SimpleIndicatorView,xml中这样声明:

  

各个属性作用,见说明末尾。

java文件中的控制:

如果想和ViewPager联动,那么Java代码只有一句:

    mIndicatorView.setViewPager(mViewpager);

如果想主动改变其显示的索引值,可通过多种方式:

//使IndicatorView当前指示的索引值加1
mIndicatorView.increaseSelectedIndexWithViewPager();  

//使IndicatorView当前指示的索引值减1
mIndicatorView.decreaseSelectedIndexWithViewPager();

//使IndicatorView指向任意的索引值
mIndicatorView.setIndexWithViewPager(int indexDest);

IndicatorView状态改变后的回调函数:

mIndicatorView.setOnIndicatorChangedListener(new IndicatorView.OnIndicatorChangedListener() { 
    @Override 
    public void onIndicatorChanged(int oldSelectedIndex, int newSelectedIndex) { 
    //如果已经和ViewPager关联了,那么不要在此处改变ViewPager的状态 
    } 
});

注意事项

  1. IndicatorLengthExtra属性请暂时使用大于等于0的dimension值,因为我暂时没有对负值做限制,如果负值过小,可能显示会有问题;
  2. 不支持在Java代码中生成此view;
  3. IndicatorView只能水平方向显示,而SimpleIndicatorView可以竖直方向显示。
  4. IndicatorView能与ViewPager联动,而SimpleIndicatorView不能。

属性说明

IndicatorView的相关属性


   //每个单元是否是等宽的 
   //indicator的颜色 
   //indicator的起始颜色,indicator的颜色随着滑动而进行改变,iv_IndicatorColorGradient属性开启后有效 
   //indicator的终止颜色,iv_IndicatorColorGradient属性开启后有效 
  //是否允许indicator随着滑动而改变颜色 
   //每个text之间的间距,在单元非等宽的条件下有效(iv_IndicatorEven="false") 
  //显示的tab标题
  //显示的tab标题的文字大小
  //显示的tab标题的非选中状态文字颜色(iv_IndicatorColorGradient="false"条件下有效
  //显示的tab标题的选中状态文字颜色(iv_IndicatorColorGradient="false"条件下有效)
  //indicator长于每个tab标题的长度的一半
  //indicator切换时的动画持续时间
  //默认的选中索引
  //indicator的高度
  //按下某个tab标题时的背景颜色
  //按下tab后,与之联动的ViewPager是否需要有动画效果,默认true

SimpleIndicatorView的相关属性


  //indicator的颜色
  //indicator的起始颜色,indicator的颜色随着滑动而进行改变,iv_IndicatorColorGradient属性开启后有效
  //indicator的终止颜色,iv_IndicatorColorGradient属性开启后有效
  //是否允许indicator随着滑动而改变颜色
  //一共包含的单元数目
  //indicator宽度与均分的单元的宽度比值
  //indicator切换时的动画持续时间
  //默认的选中索引
  //底部的线条的颜色
  //底部线条是否显示
  //底部线条的高度
  //indicator水平显示还是竖直显示
    
    
  
  //底部线条的位置:水平方向,可以在顶部,可以在底部。竖直方向,可以在左侧,可以在右侧。
    
    
  

项目地址

Github
https://github.com/Carbs0126/IndicatorView/

TODO

添加“点击某一item后,如果显示超过本屏幕,自动滑动到合适位置显示”的效果

你可能感兴趣的:(Android自定义View之IndicatorView,显示当前tab页所处位置的View)