首先加入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);
}
}