使用TabLayout撸出多颜色的Tab
来源:互联网 发布:网络推广外包合同 编辑:程序博客网 时间:2024/05/17 02:20
换了份公司,差不多两个月没有写博客了。新的公司,新的需求,还是比较坑爹的,给大伙看一下做成什么样子的东西:
由于项目刚开始的时候,没有想那么多,直接使用了android.support.design.widget.TabLayout,原因很简单,是因为懒和这个东西成熟,可是项目快要结束了,UI给我来了个有些地方你得加上颜色标注一下,搞得当时就想换个第三方的库,苦于时间的关系,还是看了下TabLayout的源码,直接使用反射给替换了下,代码不多,感觉还是有用的,这里就记一笔。
还是先看代码吧:
//换每个Tab中textView的颜色,先定义各种颜色:
public class Constant { public static final int[] COLORS = { Color.RED, Color.parseColor("#ff6000"), Color.GREEN, Color.BLUE, Color.parseColor("#179cfe") };}
使用反射更换掉颜色:
这个不懂的话,你可以留言。
for (int index = 0; index < mTabLayout.getTabCount(); index++) { TabLayout.Tab tab = mTabLayout.getTabAt(index); if (null != tab) { try { Field field = TabLayout.Tab.class.getDeclaredField("mView"); field.setAccessible(true); ViewGroup tabView = (ViewGroup) field.get(tab); for (int i = 0; i < tabView.getChildCount(); i++) { View indexView = tabView.getChildAt(i); if (indexView instanceof TextView) { ((TextView) indexView).setTextColor(Constant.COLORS[index]); } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }
更换下面Indicator的颜色:
获取画颜色的Paint:
private Paint mPaint; private void initGetIndicator() { try { Field field = TabLayout.class.getDeclaredField("mTabStrip"); field.setAccessible(true); LinearLayout layout = (LinearLayout) field.get(mTabLayout); Class<?> clazz = field.get(mTabLayout).getClass(); Field paintField = clazz.getDeclaredField("mSelectedIndicatorPaint"); paintField.setAccessible(true); mPaint = (Paint) paintField.get(layout); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
监听ViewPager.addOnPageChangeListener方法:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (position == mViewPager.getAdapter().getCount() - 1) return; if (null != mPaint) { mPaint.setColor(betWeenColor(position, positionOffset)); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } });
颜色之间的过渡:
private int betWeenColor(int position, float positionOffset) { int startColor = Constant.COLORS[position]; int endColor = Constant.COLORS[position + 1]; int redOne = (int) (Color.red(startColor) * (1 - positionOffset) + Color.red(endColor) * positionOffset); int greenOne = (int) (Color.green(startColor) * (1 - positionOffset) + Color.green(endColor) * positionOffset); int blueOne = (int) (Color.blue(startColor) * (1 - positionOffset) + Color.blue(endColor) * positionOffset); return Color.rgb(redOne, greenOne, blueOne); }
基本上就好了,另外你得自己撸一个Fragment,这个就有些简单,你就自己撸吧。如果有时间的话,我就整理一下代码。今晚就这样了。
github地址:
github
阅读全文
1 0
- 使用TabLayout撸出多颜色的Tab
- TabLayout的使用,设置tab图片
- 超简单tab切换--tablayout的使用
- Android Tablayout 自定义Tab布局的使用
- Android tablayout 单纯更改Tab的文字颜色
- TabLayout和ViewPager搭配使用中如何设置Tab背景颜色(无须自定义TabLayout)
- 自定义TabLayout的Tab
- 使用TabLayout实现不规则Tab
- Android---Tablayout自定义Tab的背景和字体的颜色变化
- Android---Tablayout自定义Tab的背景和字体的颜色变化
- TabLayout自定义Tab的title
- 设置Tablayout的tab宽度
- 平均分布TabLayout的tab
- 使用TabLayout实现底部Tab布局
- TabLayout:另一种Tab的实现方式
- 【TabLayout】 Android 另一种Tab的实现
- TabLayout:另一种Tab的实现方式
- TabLayout android Tab的一种实现方式
- ZOJ
- 1—n之间所有数的平方和与立方和
- 06 Anykey用户数据的存储和加载SecuritySharedPreference
- Retrofit和OkHttp简单的二次封装
- 最小二乘法求回归直线方程的推导过程
- 使用TabLayout撸出多颜色的Tab
- 点分治
- Linux 中常见目录的作用
- C51矩阵键盘
- java选择排序
- 依葫芦画瓢,使用CoordinatorLayout后不能滑动
- 机器学习笔记(八) 神经网络的表示
- 漂亮的课表控件-TimetableView
- Python学习1