利用ViewPager+Fragment+slidingmenu側(cè)滑組件實(shí)現(xiàn)
最近折騰了很久,經(jīng)過三番五次的推倒重來,總算是弄出了一個效果比較滿意的側(cè)滑demo。把主要的實(shí)現(xiàn)流程mark下來,方便日后翻閱,實(shí)現(xiàn)的效果圖(手動錄制的,不流暢):
本文引用地址:http://cafeforensic.com/article/201610/306013.htm從圖上可以看到,demo上面有三個按鈕和一個包含3個Fragment頁面的ViewPager,另外左側(cè)滑能拉出一個左頁面。剛開始做的demo是直接用FragmentTabHost來實(shí)現(xiàn)的,并在這個基礎(chǔ)上繼承RelativeLayout寫了個布局,來實(shí)現(xiàn)頁面的側(cè)滑效果。那個demo的效果跟這個的主要差距就是三個tab之間只能通過點(diǎn)擊切換,沒有viewpager這樣的滑動切換效果。這個demo下面的三個按鈕其實(shí)是三個RadioButton,只是把它前面的圓點(diǎn)隱藏了(demo里面沒好好弄按鈕上的背景效果了)。之前嘗試過利用PagerTitleStrip來實(shí)現(xiàn)三個Tab的標(biāo)簽,但結(jié)果是它們會隨著ViewPager不停滾動,沒法固定下來。
demo主要的布局文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent >
android:id=@+id/pager
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_above=@+id/titlelayout >
android:id=@+id/titlelayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_alignParentBottom=true >
android:id=@+id/tab_menu
android:layout_width=fill_parent
android:layout_height=wrap_content
android:background=@drawable/tab_bg_normal
android:orientation=horizontal >
android:id=@+id/title1
style=@style/tab_style
android:checked=true
android:drawableTop=@drawable/tab_activity_selector
android:text=活動 />
android:id=@+id/title2
style=@style/tab_style
android:drawableTop=@drawable/tab_friend
android:text=工作 />
android:id=@+id/title3
style=@style/tab_style
android:drawableTop=@drawable/tab_friend
android:text=圈子 />
要實(shí)現(xiàn)ViewPager+Fragment的滑動效果,必須繼承FragmentActivity,同時要給ViewPager設(shè)置Adapter。由于ViewPager上面要加載Fragment(需要繼承Fragment類),所以不是重載PagerAdapter,而是重寫FragmentPagerAdapter類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MyViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList
public MyViewPagerAdapter(FragmentManager fm) {
super(fm);
}
/**
* 自定義的構(gòu)造函數(shù)
* @param fm
* @param fragments ArrayList
*/
public MyViewPagerAdapter(FragmentManager fm,ArrayList
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);//返回Fragment對象
}
@Override
public int getCount() {
return fragments.size();//返回Fragment的個數(shù)
}
}
寫好了adapter,在主函數(shù)的onCreate()函數(shù)里面初始化ViewPager,同時給它配置adapter和設(shè)置滑動事件監(jiān)聽(這需要實(shí)現(xiàn)OnPageChangeListener接口):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* 初始化視圖
*/
private void initView() {
// TODO Auto-generated method stub
評論