ViewPager的使用方法(实现左右滑动切换页面)

              


首先加入ViewPager

<android.support.v4.view.ViewPager

               android:id = "@+id/pager"

               android:layout_width = "wrap_content"

               android:layout_height = "wrap_content"

               android:layout_gravity = "center"/>


加载显示的页卡

将layout布局装换为View对象

(1) LayoutInflater if = getLayoutInflater().from(this);

           if.inflater(resource,root);

(2) View.inflater(context,resource,root);


配置Adapter适配器

(1)  PagerAdapter 数据源: List<View>

(2)  FragmentPagerAdapter  数据源:List<Fragment>

(3) FragmentStatePagerAdapter  数据源:List<Fragment>


下面是代码示例:

1.代码组成:一个含有ViewPager的主布局,四个view布局展示四个页面,一个主类,一个适配器

主布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">


        </android.support.v4.view.ViewPager>>
    
</LinearLayout>

2.四个展示页面View,大家可以自行编写,只要能区分就行,可以设置一些不同的文字,或者不同的颜色

3.主类代码:

public class MainActivity extends Activity {

private ViewPager pager;
private List<View> pagerList;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pagerList = new ArrayList<View>();

/*
* 通过ViewPager添加布局
* */
View view1 = View.inflate(this, R.layout.view1, null);
View view2 = View.inflate(this, R.layout.view2, null);
View view3 = View.inflate(this, R.layout.view3, null);
View view4 = View.inflate(this, R.layout.view4, null);

pagerList.add(view1);
pagerList.add(view2);
pagerList.add(view3);
pagerList.add(view4);

/*
* 实例化pager控件
* */
pager = (ViewPager) findViewById(R.id.pager);

MyPagerAdapter adapter = new MyPagerAdapter(pagerList);

pager.setAdapter(adapter);

}


}

4.适配器代码:

public class MyPagerAdapter extends PagerAdapter{
private List<View> pagerList;

//构造函数
public MyPagerAdapter(List<View> pagerList) {
// TODO Auto-generated method stub
this.pagerList = pagerList;
}


//返回页面的数量
@Override
public int getCount() {
// TODO Auto-generated method stub
return pagerList.size();
}
     //View是否来自于对象
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
//实例化一个页面
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(pagerList.get(position));
return pagerList.get(position);
}
//销毁一个页面
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView(pagerList.get(position));
}
}

代码下载地址:http://download.csdn.net/detail/weimo1234/8435457

当然我们还可以给每个页面加上标题:我们可以在ViewPager中使用下面两个控件

(1)android:support.v4.view.PagerTabStrip    它是ViewPager的子类需要写在ViewPager里面

(2)android.support.v4.view.PagerTitleStrip

通过根据自己的设计(1)top置顶,(2)置底bottom来设置布局

主类需要添加如下代码:

private List<String>  titleList;


/*
*  为ViewPager设置标题
*  */
titleList = new ArrayList<String>();
titleList.add("红色");
titleList.add("黄色");
titleList.add("绿色");
titleList.add("蓝色");


MyPagerAdapter适配器中需要修改构造函数,添加标题方法:

//添加标题的方法
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}

代码下载地址:http://download.csdn.net/detail/weimo1234/8435613

我们还可以给标题的底线设置自定义颜色样式等:

//为PagerTabStrip设置一些属性
tab = (PagerTabStrip) findViewById(R.id.tab);
tab.setBackgroundColor(Color.GRAY);
tab.setTextColor(Color.WHITE);
tab.setDrawFullUnderline(false);
tab.setTabIndicatorColor(Color.LTGRAY);

我们还可以使用FragmentPagerAdapter设置监听事件:所以我们需要添加四个Fragment类和一个FragmentPagerAdapter适配器:

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{


private List<Fragment> fragList;
private List<String> titleList;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragList,List<String> titleList) {
super(fm);
this.fragList = fragList;
this.titleList = titleList;
}


@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragList.get(arg0);
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return fragList.size();
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章