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