Gradle
JitPack v1.0.2
allprojects { repositories {maven { url "https://jitpack.io" } }}dependencies { compile "com.github.Dawish:FlymeTabStrip:v1.0.2"}Attrs
<declare-styleable name="FlymeTabStrip"><!-- 指示器高度 --><attr name="indicatorHeight" format="dimension" /><!-- 指示器滑动条颜色 --><attr name="indicatorColor" format="color" /><!-- 指示器左右间距 --><attr name="indicatorMargin" format="dimension" /><!-- 指示器文字颜色 --><attr name="indicatorTextColor" format="color" /><!-- 指示器文字大小 --><attr name="indicatorTextSize" format="dimension" /><!-- 指示器文字被选中后的大小 --><attr name="selectedIndicatorTextSize" format="dimension" /> </declare-styleable>Sample
/*** viewPager状态改变监听**/ private class PagerStateChangeListener implements OnPageChangeListener {/** * viewpager状态监听 * @param state */@Overridepublic void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { // 0 空闲状态 pager处于空闲状态scrollToChild(viewPager.getCurrentItem(), 0); }else if(state == ViewPager.SCROLL_STATE_SETTLING){ // 2 正在自动沉降,相当于松手后,pager恢复到一个完整pager的过程 }else if(state == ViewPager.SCROLL_STATE_DRAGGING){ // 1 viewpager正在被滑动,处于正在拖拽中 }}/** * viewpager正在滑动,会回调一些偏移量 * 滚动时,只要处理指示器下方横线的滚动 * @param position 当前页面 * @param positionOffset 当前页面偏移的百分比 * @param positionOffsetPixels 当前页面偏移的像素值 */@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { currentPosition = position; currentPositionOffset = positionOffset; // 处理指示器下方横线的滚动,scrollToChild会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果 scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth())); invalidate();}/** * page滚动结束 * @param position 滚动结束后选中的页面 */@Overridepublic void onPageSelected(int position) { // 滚动结束后的未知 selectedPosition = position; // 更新指示器状态 updateTabStyle();} }其中最主要的方法就是:
/** * viewpager正在滑动,会回调一些偏移量 * 滚动时,只要处理指示器下方横线的滚动 * @param position 当前页面 * @param positionOffset 当前页面偏移的百分比 * @param positionOffsetPixels 当前页面偏移的像素值 */@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { currentPosition = position; currentPositionOffset = positionOffset; // 处理指示器下方横线的滚动,scrollToChild会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果 scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth())); invalidate();}github地址:https://github.com/Dawish/FlymeTabStrip