TabViewPager
項(xiàng)目地址:GitHub
項(xiàng)目中經(jīng)常能用到這樣的使用場景:
在頂部顯示一個Header,接著是一個TabLayout,而每個Tab都對應(yīng)一個RecyclerView,在向上滑動的時候,Header和TabLayout跟隨RecyclerView滑動,但是TabLayout不能移出頂部。
咕~~(╯﹏╰)b,聽起來很復(fù)雜,不知所云
對于這種效果,有兩種解決方案:
- Android提供的Design包實(shí)現(xiàn)
- 自己控制Header移動
方案一:Android提供的Design包
這種方案的效果如下:

對于這種效果,我們要怎么實(shí)現(xiàn)呢?
布局中大致是這樣的結(jié)構(gòu)
<CoordinatorLayout >
<AppBarLayout>
<CollapsingToolbarLayout>
<Toolbar>
</Toolbar>
</CollapsingToolbarLayout>
</AppBarLayout>
<TabLayout>
</TabLayout>
<ViewPager>
</ViewPager>
</CoordinatorLayout>
可以看到,布局很復(fù)雜,而且必須是Material Design風(fēng)格,就國內(nèi)這種環(huán)境,很多App應(yīng)該Toolbar都是自己寫的吧,更別說Material Design了,就個人而言,我不太喜歡這種顯示方式,不夠干脆利落。
方案二:自己控制Header移動
第二種方案是自己手動控制Header的移動,這樣雖然布局邏輯簡單了,但是必須自己手動去調(diào)整Header的位置,增加了代碼的復(fù)雜性,于是乎,我就簡單的封裝了一個小小小小的庫,讓你用最簡單的方式實(shí)現(xiàn)這種效果。
廢話不多說,有圖有真相:

怎么樣,看起來是不是很簡潔,那接下來老夫就講講怎么使用
首先,你需要在build.gradle中添加一條依賴:
compile 'com.goyourfly:tabviewpager:0.5'
接下來呢,在布局中添加TabViewPager
<com.goyourfly.tabviewpager.TabViewPager
android:id="@+id/tabViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
最后呢,在代碼中進(jìn)行一下簡單的配置
TabViewPager tabViewPager = findViewById(R.id.tabViewPager);
tabViewPager.setup(new String[]{"A", "B", "C"},//Tab數(shù)組
View.inflate(this, R.layout.layout_header, null),// HeaderView
true,// Header是否Parallax
new Function2<RecyclerView, Integer, Unit>() {
@Override
public Unit invoke(RecyclerView recyclerView, Integer integer) {
// 為每個Tab下的RecyclerView綁定LayoutManager
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivityJava.this));
// 為每個Tab下的RecyclerView綁定Adapter
recyclerView.setAdapter(new MyAdapter());
return null;
}
});
然后,然后就沒有然后了??,怎么樣,是不是感覺很簡單,如果覺得還闊以的話,麻煩給個Star,萬一以后用的到呢,?(? ? ??)嘿嘿,謝謝啦,好了,不說了,我要打游戲去了~~~