项目地址:AnJiaoDe/TabLayoutNiubility
简介: Android 自定义控件之 RecyclerView 打造万能 ViewPager TabLayout(仿今日头条 Tab 滑动、Tab 多布局、indicator 蠕动、自定义 indicator、文字颜色渐变、自定义 Fragment)
更多:作者 提 Bug
标签:
tab-tablayout-recyclerview-导航-
文章目录
GitHub:GitHub - AnJiaoDe/TabLayoutNiubility: Android自定义控件之RecyclerView打造万能ViewPager TabLayout(仿今日头条Tab滑动、Tab多布局、indicator蠕动、自定义indicator、文字颜色渐变、自定义Fragment)
CSDN:Android自定义控件之RecyclerView打造万能ViewPager TabLayout(仿今日头条Tab滑动、Tab多布局、indicator蠕动、自定义indicator、文字颜色渐变)_安娇德的博客-CSDN博客
该轮子特异功能如下:
使用方法
注意:该轮子适用于 androidx 中的 ViewPager2 和 ViewPager
注意:如果轮子死活下载不下来,说明 maven 地址有毛病,你需要找到 jitpack 的官网首页,查看最新的官网地址
注意:记得去 gayhub 查看最新版本,最新版本最 niubility
详细使用如下
Tab 均分不滑动(ViewPager、ViewPager2 均支持)
Tab 滑动、 indicator 蠕动、多布局(ViewPager、ViewPager2 均支持)
根据 item 个数动态设置 Tab 均分还是滑动
Tab 文字颜色渐变(ViewPager、ViewPager2 均支持)
自定义 Indicator 如三角形(ViewPager、ViewPager2 均支持)
ViewPager 双层嵌套(建议不要使用 ViewPager2 进行双层嵌套,ViewPager2 嵌套滑动冲突几乎无法处理,贼鸡儿坑)
仿微信主页 Tab
千古 BUG:Activity 销毁重启,Fragment 恢复问题
AndroidX ViewPager 中的 FragmentStatePagerAdapter 存在的问题
AndroidX ViewPager2 中的 FragmentStateAdapter 存在的问题
自定义 fragment
自定义 Fragment PageContainer 双层嵌套(ViewPager 和 ViewPager2 均适用)
相关 API
TabMediator
FragmentPageAdapter
TabAdapter
TabLayoutScroll、TabLayoutNoScroll、TabLayoutMulti、IndicatorLineView 、 IndicatorTriangleView
TabLayoutScroll 和 indicator style 设置
自定义 indicator
实现原理剖析
说真的,这自定义控件还真不简单
涉及到的难点场景
搞清楚 ViewPager 监听的 onPageSelected、onPageScrolled 和 onPageScrollStateChanged 回调执行特点
自定义 HorizontalRecyclerView 实现 TabLayout
源码如下
TabLayout 的 item 宽度均分
RecyclerView 的 item 刷新如何做到不闪烁
UML 类图如下
面向接口编程(面向多态编程)的思想
欢迎联系、指正、批评
Tab 均分不滑动(ViewPager、ViewPager2 均支持)
Tab 滑动、 indicator 蠕动、多布局(ViewPager、ViewPager2 均支持)
根据 item 个数动态设置 Tab 均分还是滑动
Tab 文字颜色渐变(ViewPager、ViewPager2 均支持)
自定义 Indicator 如三角形(ViewPager、ViewPager2 均支持)
ViewPager 双层嵌套(建议不要使用 ViewPager2 进行双层嵌套,ViewPager2 嵌套滑动冲突几乎无法处理,贼鸡儿坑)
仿微信主页 Tab
自定义 fragment
1.工程目录下的build.gradle
中添加代码:
allprojects {
repositories {
maven { url 'https://www.jitpack.io' }
}
}
2.直接在需要使用的模块的build.gradle
中添加代码:
dependencies {
api 'com.github.AnJiaoDe:TabLayoutNiubility:V1.2.8'
}
3.如果你想使用ViewPager2
,那么添加代码:
api 'androidx.viewpager2:viewpager2:1.0.0'//版本必须>=1.0.0
4.混淆已配置到库内部,无需做混淆配置