ViewPagerIndicator

作者: 安卓小生 | 来源:发表于2016-08-23 10:10 被阅读1904次

    ViewPagerIndicator

    1. 支持自定义tab样式

    2. 支持自定义滑动块样式和位置

    3. 支持自定义切换tab的过渡效果

    4. 支持子界面的预加载和界面缓存

    5. 支持设置界面是否可滑动

    6. android:minSdkVersion="8" android:targetSdkVersion="24"

    7.导入方式

    <1>gradle导入

    compile 'com.shizhefei:ViewPagerIndicator:1.1.2'

    由于用到了v4和recyclerview所以也要导入他们

    compile 'com.android.support:support-v4:23.4.0'

    compile 'com.android.support:recyclerview-v7:23.2.1'

    <2>jar包方式导入

    这次开发中使用到了滑动标题栏并且可切换标题切换底部的viewpager,如图所示:

    这个可以解决轮播banner,引导页,4个界面的tab页面,可滑动tab界面等项目中常用的组件。

    这个框架主要的类有:

    1.ViewPager

    2.Indicator

        顾名思义是指示器的意思。有点像水平方向的listview 可以自定义item。

       Indicator

          setCurrentItem(int item, boolean anim) 设置当前项

          setOnTransitionListener(OnTransitionListener onTransitionListener)设置tab过渡动画

          setOnItemSelectListener(OnItemSelectedListener onItemSelectedListener)设置tab切换监听

          setScrollBar(ScrollBar scrollBar)设置跟随tab滑动的滑动块

       1.FixedIndicatorView 主要用于固定大小来平均分配tab的情况。

           setSplitMethod(int splitMethod) 设置tab分割方式,平均分割,wrap分割,比重分割

          setCenterView(View centerView, ViewGroup.LayoutParams layoutParams)设置显示在tab中心的View,用于实现新浪微博底部+号

          getCenterView();

       2.ScrollIndicatorView 主要用于多个tab可以进行滑动。

           setSplitAuto(boolean splitAuto) 设置是否自动分割,当总tab宽度小于Indicator宽度就平均分割tab,或者比重分割。大于Indicator宽度就wrap分割

          setPinnedTabView(boolean isPinnedTabView) 设置是否固定第一个tab

           setPinnedShadow(Drawable shadowDrawable, int shadowWidth)设置固定tab的阴影

       3.RecyclerIndicatorView 主要用于无数个tab可以进行滑动。

         优点适用于tab很多的情况,缺点tab少的时候没有ScrollIndicatorVie的自动分割功能。

    3.IndicatorViewPager

    indicatorViewPager.setAdapter(IndicatorPagerAdapter adapter)

    // 设置它可以自定义实现在滑动过程中,tab项的字体变化,颜色变化等等过渡效果

    indicatorViewPager.setIndicatorOnTransitionListener(onTransitionListener);

    // 设置它可以自定义滑动块的样式

    indicatorViewPager.setIndicatorScrollBar(scrollBar);

    // 设置page是否可滑动切换

    indicatorViewPager.setPageCanScroll(false);

    /*

    * 设置缓存界面的个数,左右两边缓存界面的个数,不会被重新创建。 默认是1,表示左右两边

    * 相连的1个界面和当前界面都会被缓存住,比如切换到左边的一个界面,那个界面是不会重新创建的。

    */

    indicatorViewPager.setPageOffscreenLimit(1);

    /*

    * 设置预加载界面的个数。左右两边加载界面的个数 默认是1,表示左右两边 相连的1个界面会和当前界面同时加载

    */

    indicatorViewPager.setPagePrepareNumber(1);

    // 设置页面切换监听

    indicatorViewPager.setOnIndicatorPageChangeListener(onIndicatorPageChangeListener);

    // 设置page间的图片的宽度

    indicatorViewPager.setPageMargin(1);

    // 设置page间的图片

    indicatorViewPager.setPageMarginDrawable(d);

    4.BannerComponent(无限轮播banner)

    setAutoPlayTime(long time) 设置自动播放的间隔时间

    startAutoPlay(); 开始播放

    stopAutoPlay(); 停止播放

    5.IndicatorPagerAdapter,

        里面使用的是view,

    6.ScrollBar

    tab的滑动块通过indicatorViewPager.setIndicatorScrollBar(scrollBar);进行设置子类有

    ColorBar 颜色的滑动块

    DrawableBar 图片滑动块

    LayoutBar 布局滑动块

    TextWidthColorBar 大小同tab里的text一样宽的颜色的滑动块

    SpringBar 实现拖拽效果的圆形滑动块  该类修改于https://github.com/chenupt/SpringIndicator

    7.OnTransitionListener

    子类有

    OnTransitionTextListener tab的字体颜色变化,和字体大小变化效果

    8.LazyFragment

    1.实现原理:

    一开始onCreateView的时候只是加载一个空的FrameLayout

    当通过结合onCreateView和setUserVisibleHint两个方法进行判断是否需要加载真正的布局界面,需要的时候把真正的布局界面添加到之前的空的FrameLayout上面

    2.回调方法:

    onCreateViewLazy  对应 onCreateView

    onDestroyViewLazy 对应 onDestroyView

    onResumeLazy      对应 onResume

    onPauseLazy      对应 onPause

    onDestroy 和 onCreate 方法不变

    另外添加了onFragmentStartLazy fragment显示的时候调用,在ViewPager界面切换的时候你就可以通过这个判断是否显示

    onFragmentStopLazy fragment不显示的时候调用

    上面所有有lazy结尾的方法都意味着 真正的布局正在显示

    3.使用方法

    放心在onCreateViewLazy 的时候创建布局,初始化数据。调用该方法的时候,界面已经要显示啦  在onDestroyViewLazy的方法里面做释放操作

    我在本次开发中使用的是可滑动的tab页,首先在xml布局文件引用com.shizhefei.view.indicator.ScrollIndicatorView和ViewPager,然后在java代码中实例化组件,调用mScrollIndicatorView.setOnTransitionListener设置切换时标题的颜色,mScrollIndicatorView.setScrollBar设置滚动条,然后将mViewPager和mScrollIndicator传入获取IndicatorViewPager对象,因为我的需求是在viewpager加载fragment,所以我们得重写适配器,继承自IndicatorViewPager.IndicatorFragmentPagerAdapter,重写getCount(),getViewForTab,getFragmentForPage,最后setAdapter,大工告成。

    如果说你的viewpager加载的是图片就继承IndicatorViewPager.IndicatorViewPagerAdapter,其他的步骤如上。

    在此感谢github作者,来自https://github.com/LuckyJayce/ViewPagerIndicator#viewpagerindicator

    相关文章

      网友评论

      • 73ece15c815f:我使用了指示器为底部是横线的哪个,项目直接ANR了,好奇怪。。求解
      • da598234eb3b:请问我用了tab和viewpager相关联,当我刷新viewpager里面的数据时,tab也需要连带着刷新,请问tab 怎么刷新?

      本文标题:ViewPagerIndicator

      本文链接:https://www.haomeiwen.com/subject/dtggsttx.html