您的位置:首页 > 其它

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

2015-02-09 11:08 676 查看
首先加入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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: