前言
TabLayout 我相信大家都有使用过,但是官方并没有对Indicator可以设置为图片的支持,只能是简单的水平线,也就是滑动杆那个玩意,那么如何做到可以用图片来做指示器呢?作为一个喜欢探索新颖解决方案的我,现在给大家带来了大家都很期待的问题的解决方案,下面我来讲讲我的思路和解决方案
先上效果
这是我将要做到的事情,实现TabLayout的Indicator可自定义image
效果图
分析源码
既然TabLayout 能够和ViewPager手势联动那就说明Tablayout和ViewPager有关联,先来看一下他们是如何关联的
tab_layout.setupWithViewPager(viewpager)
通过这个方法Tablayout和ViewPager相遇了,继续跟进这个方法执行最终会执行到这里
private void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh,
boolean implicitSetup) {
...
if (viewPager != null) {
//保存一个成员变量引用
mViewPager = viewPager;
// Add our custom OnPageChangeListener to the ViewPager
if (mPageChangeListener == null) {
mPageChangeListener = new TabLayoutOnPageChangeListener(this);
}
mPageChangeListener.reset();
//关注点1
viewPager.addOnPageChangeListener(mPageChangeListener);
//关注点2
// Now we'll add a tab selected listener to set ViewPager's current item
//注释很明显翻译过来就是添加一个选项选择监听器来设置ViewPager的当前项
mCurrentVpSelectedListener = new ViewPagerOnTabSelectedListener(viewPager);
addOnTabSelectedListener(mCurrentVpSelectedListener);
}
...
}
关注点1添加监听ViewPager的滑动事件,关注点2添加Tablayout选择事件来设置ViewPager的当前项,关注点2注释已经解释得很清楚,重点分析关注点1ViewPager滑动事件,我们lou一眼
public static class TabLayoutOnPageChangeListener implements ViewPager.OnPageChangeListener {
//Viewpager滑动偏移量回调
@Overri