可滑动的顶部导航页ViewPager和Fragment的使用

可滑动的顶部导航页ViewPager和Fragment的使用

通过ViewPager和Fragment实现侧滑切换导航栏的功能,如下图所示。

一、定义主布局文件main.xml

最上面是一个导航栏,分别有三个textview构成,然后再textview下面设置一个标签卡最下面是使用Android.support.v4.view.viewpager构成


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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

<?xml
version=
"1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <LinearLayout  

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

          

          

        <TextView  

            android:id="@+id/tv_guid1"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1.0"

            android:gravity="center"

            android:text="特性1"

            android:textSize="18sp"/> 

        <TextView   

            android:id="@+id/tv_guid2"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1.0"

            android:gravity="center"

            android:text="特性2"

            android:textSize="18sp"/>   

    

        <TextView   

            android:id="@+id/tv_guid3"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1.0"

            android:gravity="center"

            android:text="特性3
"

            android:textSize="18sp"/>   

    

        <TextView   

            android:id="@+id/tv_guid4"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1.0"

            android:gravity="center"

            android:text="特性4"

            android:textSize="18sp"/> 

    </LinearLayout> 

  

    <TextView  

        android:id="@+id/cursor"

        android:layout_width="80dp"

        android:layout_height="5dp"

        android:background="#990033"

        /> 

      

    <android.support.v4.view.ViewPager 

        android:id="@+id/viewpager"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:flipInterval="30"

        android:persistentDrawingCache="animation"/>

</LinearLayout>

二、在MainActivity.java中加载主布局文件mian.xml

定义一个ArrayList<Fragment>将初始化后的Fragment添加到集合中。然后设定viewpager的适配器,同时要自定义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

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

public class MainActivity extends FragmentActivity{

     private ViewPager
mPager; 

        private ArrayList<Fragment>
fragmentList; 

        private TextView
barText; 

        private TextView
view1, view2, view3, view4; 

        private int currIndex;//当前页卡编号

        protected void onCreate(Bundle
savedInstanceState) { 

            super.onCreate(savedInstanceState); 

            setContentView(R.layout.main); 

              

            InitTextView(); 

            InitTextBar(); 

            InitViewPager(); 

        

         

         //
初始化标签名

        public void InitTextView(){ 

            view1
= (TextView)findViewById(R.id.tv_guid1); 

            view2
= (TextView)findViewById(R.id.tv_guid2); 

            view3
= (TextView)findViewById(R.id.tv_guid3); 

            view4
= (TextView)findViewById(R.id.tv_guid4); 

              

            view1.setOnClickListener(new txListener(0)); 

            view2.setOnClickListener(new txListener(1)); 

            view3.setOnClickListener(new txListener(2)); 

            view4.setOnClickListener(new txListener(3)); 

        

          

        public class txListener implements View.OnClickListener{ 

            private int index=0

              

            public txListener(int i)

                index
=i; 

            

            @Override

            public void onClick(View
v) { 

                mPager.setCurrentItem(index); 

            

        

         

        //
初始化标签卡的位移像素

        public void InitTextBar(){ 

            barText
= (TextView) 
super.findViewById(R.id.cursor);

            Display
display = getWindow().getWindowManager().getDefaultDisplay();

                      //
得到屏幕的宽度

            DisplayMetrics
metrics = 
new DisplayMetrics();

            display.getMetrics(metrics);

                      //
1/3得到屏幕

            int  tabLineLength
= metrics.widthPixels / 
4;

             LayoutParams
lp = (LayoutParams) barText.getLayoutParams();

             lp.width
= tabLineLength;

             barText.setLayoutParams(lp);

        

      

         //
初始化ViewPager

        public void InitViewPager(){ 

            mPager
= (ViewPager)findViewById(R.id.viewpager); 

            fragmentList
new ArrayList<Fragment>(); 

            Fragment
btFragment= 
new ButtonFragment(); 

            Fragment
secondFragment = TestFragment.newInstance(
"this
is second fragment"
); 

            Fragment
thirdFragment = TestFragment.newInstance(
"this
is third fragment"
); 

            Fragment
fourthFragment = TestFragment.newInstance(
"this
is fourth fragment"
); 

            fragmentList.add(btFragment); 

            fragmentList.add(secondFragment); 

            fragmentList.add(thirdFragment); 

            fragmentList.add(fourthFragment); 

              //给ViewPager设置适配器 

            mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(),
fragmentList)); 

            mPager.setCurrentItem(0);//设置当前显示标签页为第一页

            mPager.setOnPageChangeListener(new MyOnPageChangeListener());//页面变化时的监听器

        

      

        public class MyOnPageChangeListener implements OnPageChangeListener{ 

            public void onPageScrolled(int arg0, float arg1, int arg2)

                  //取得该控件的实例

                LinearLayout.LayoutParams
ll = (android.widget.LinearLayout.LayoutParams) barText

                        .getLayoutParams();

                

                if(currIndex
== arg0){

                     ll.leftMargin
= (
int)
(currIndex * barText.getWidth() + arg1

                             *
barText.getWidth());

                }else if(currIndex
> arg0){

                     ll.leftMargin
= (
int)
(currIndex * barText.getWidth() - (
1 -
arg1)* barText.getWidth());

                }

                barText.setLayoutParams(ll);

            

              

            public void onPageScrollStateChanged(int arg0)

            

              

            public void onPageSelected(int arg0)

                currIndex
= arg0;  

                int i
= currIndex + 
1

                Toast.makeText(MainActivity.this"您选择了第"+i+"个页卡",
Toast.LENGTH_SHORT).show(); 

            

        

}

三、自定义FragmentPagerAdapter

自定义的FragmentPagerAdapter要继承FragmentPagerAdapter


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class MyFragmentPagerAdapter extends FragmentPagerAdapter
{

    ArrayList<Fragment>
list;

    public MyFragmentPagerAdapter(FragmentManager
fm, ArrayList<Fragment> list) {

        super(fm);

        this.list
= list;

    }

    public int getCount()
{

        return list.size();

    }

    public Fragment
getItem(
int arg0)
{

        return list.get(arg0);

    }

}

四、Fragment的布局加载。

Fragment加载布局文件实现viewpager中单个页面的内容。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public class ButtonFragment extends Fragment
{

    Button
myButton;

    public View
onCreateView(LayoutInflater inflater, ViewGroup container,

            Bundle
savedInstanceState) {

        View
rootView = inflater.inflate(R.layout.guide_1, container, 
false);//
关联布局文件

        myButton
= (Button) rootView.findViewById(R.id.mybutton);
//
根据rootView找到button

        

        myButton.setOnClickListener(new View.OnClickListener()
{

            public void onClick(View
v) {

                Toast.makeText(ButtonFragment.this.getActivity(),

                        "button
is click!"
,
Toast.LENGTH_SHORT).show();

            }

        });

        return rootView;

    }

}

时间: 2024-10-09 22:59:31

可滑动的顶部导航页ViewPager和Fragment的使用的相关文章

Android ViewPager和Fragment实现顶部导航界面滑动效果

在项目中,我们常常需要实现界面滑动切换的效果.例如,微信界面的左右滑动切换效果.那这种效果是怎么实现的?今天我就带大家简单了解ViewPager,并通过实例来实现该效果. 一. ViewPager 官方API 首先我们来看一下ViewPager官方给出的解释,如图: 具体意思如下: Layout 管理器允许用户可以在页面上,左右滑动来翻动页面.你可以考虑实现PagerAdapter接口来显示该效果. ViewPager很多时候会结合Fragment一块使用,这种方法使得管理每个页面的生命周期变得

ViewPager和Fragment结合使用,可以做出顶部导航界面滑动效果

在项目中,我们常常需要实现界面滑动切换的效果.例如,微信界面的左右滑动切换效果.那这种效果是怎么实现的?今天我就带大家简单了解ViewPager,并通过实例来实现该效果. 一. ViewPager 官方API 首先我们来看一下ViewPager官方给出的解释,如图: 具体意思如下: Layout 管理器允许用户可以在页面上,左右滑动来翻动页面.你可以考虑实现PagerAdapter接口来显示该效果. ViewPager很多时候会结合Fragment一块使用,这种方法使得管理每个页面的生命周期变得

ViewPager实现导航页

我们在首次安装app时,往往会发现会有导航页. 导航页一般用于介绍功能和引导使用,那我们其实可以用ViewPager实现. ViewPager用于实现多页面的滑动切换效果,使用时需要引入"android.support.v4"包. 好了,我们现在开始就来做一个简单的导航页引导. 首先我们新建一个Android Application Project,我们把自动生成的MainActivity作为应用程序的主界面: 其布局文件我们简单设置下: activity_main.xml: <

【Android实战】ScrollView+GridView+ViewPager实现导航页

按照常规思路,实现导航页有专门的TabHost或ViewPager,但自定义空间不大,再者,自己想熟悉一下多重布局和动画效果的使用,因此采用这种ScrollView+GridView+ViewPager的效果. 其中比较麻烦的是GridView实现横向的加载,并且下面的滚动条随着滑动也得滚动和动态发生位置变化. public class MainAct extends FragmentActivity { ViewPager viewPager; HorizontalScrollView scr

Js控制网页滑动的时候顶部导航条变成半透明实例

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <!--引入jQuery--> <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.js"></script> <title>Js控制网页滑动的时候顶部导航条变

TabLayout实现顶部导航(一)

代码地址如下:http://www.demodashi.com/demo/14552.html 前言 顶部导航栏,是我们在开发中比较常见的一种显示布局,它的实现可以有多种方式,那么今天我们就来讲讲 TabLayout 对它的实现 今天涉及的内容有: 实现导航栏的几种方式 库的导入 TabLayout的具体使用 效果图 一.实现导航栏的几种方式及解析 我们在实现顶部导航的时候,可以有多种选择: ViewPagerIndicator + Fragment + ViewPager ActionBar

仿今日头条最强顶部导航指示器,支持6种模式-b

项目中经常会用到类似今日头条中顶部的导航指示器,我也经常用一个类似的库PagerSlidingTabStrip,但是有时并不能小伙伴们的所有需求,所以我在这个类的基础上就所有能用到的情况做了一个简单的封装.大家知道做一个功能比较简单,但是封装好几种功能到一个类里面就需要处理的好多逻辑了,所以对于小编这种小白也是花了好久的业余时间才搞完的,希望大家能够多多支持,更希望我的绵薄之力能够帮助大家.源码和Demo已经上传到github了,欢迎大家多多fork和star. github地址:https:/

Android仿小米商城底部导航栏之二(BottomNavigationBar、ViewPager和Fragment的联动使用)

简介 在前文<Android仿小米商城底部导航栏(基于BottomNavigationBar)>我们使用BottomNavigationBar控件模仿实现了小米商城底部导航栏效果.接下来更进一步的,我们将通过BottomNavigationBar控件和ViewPager空间的联动使用来实现主界面的滑动导航. 导航是移动应用最重要的方面之一,对用户体验是良好还是糟糕起着至关重要的作用.好的导航可以让一款应用更加易用并且让用户快速上手.相反,糟糕的应用导航很容易让人讨厌,并遭到用户的抛弃.为了打造

Android之仿今日头条顶部导航栏效果

随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以有加了顶部导航栏. 今日头条顶部导航栏区域的主要部分是一个导航菜单.导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面.当用户在ViewPager区域滑动页面时,对应的导航菜单标签也会相应的被选中,选中的标签通过一个矩形红框高亮显示,红框背