首先,本文主要就是在使用TabLayout与ViewPager完成Tab导航,进一步学习下TabLayout。
一、TabLayout的关键API
1.setupWithViewpager(ViewPager viewPager)
该方法完成了TabLayout与ViewPager的关联,该方法的源码也是非常清晰易读(如下)。
setupWithViewPager方法源码该方法主要做了几件事:
(1)获取ViewPager的adapter,该adapter可以设置与ViewPager同步的tab标题。
(2)利用ViewPager的回调接口,采用的是TabLayoutOnPageChangeListener,处理当viewpager滑动改变时,TabLayout中的tab也与之同步改变,
(3)TabLayout的回调接口,这个回调接口中一个重要的参数就是viewpager,这样当滑动选择或点击选中tab时,ViewPager也能同步对应变化。
(4)根据当前的viewpager选中项,来设置TabLayout的当前选中tab。
二、TabLayout的内部类:Tab、TabView、SlidingTabStrip
1、Tab类是对Tab最基础的抽象,最基础的当然是设置Tab的标题,也支持设置Tab的图标(setIcon方法)。
2、TabView类是对Tab类进行一个二次封装。
3、SlidingTabStrip类主要处理指示线的,即Tab的下划线(随着Tab的滑动而滑动)。
三、TabLayout的Tab滚动
1、从源码中看到主要就是在animateToTab(int newPosition)方法中完成的。
Tab的滚动主要就是通过ValueAnimatorCompat(属性动画,做了兼容处理),通过属性动画改变x轴的值,然后通过scrollTo方法实现滚动(TabLayout继承自HorizontalScrollView)。
最后,文章写得还是很简单,自己要坚持写,争取写得更好。
网友评论