ViewPager是support v4包中的页面切换视图,使用时需要导入support.v4的包
xml:声明
<android.support.v4.view.ViewPager
android:id="@+id/m_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
java:配置和多个view的关系需要使用PagerAdapter
初始化:
ViewPager mPager = (ViewPager) findViewById(R.id.m_pager);
定义需要的页面
List<View> list = new ArrayList<View>();
...
list.add(v1);
list.add(v2);
定义适配器,需要继承PagerAdapter
class MyPagerAdapter extends PagerAdapter {
private List<View> list;
MyPagerAdapter(List<View> list) {
this.list = list;
}
// 配置多少个页面
@Override
public int getCount() {
return null == list ? 0 : list.size();
}
@Override
public boolean isViewFromObject(View v, Object obj) {
return v == obj;
}
// 视图移除缓冲区时触发
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//获取要移除的视图对象
View v = list.get(position);
container.removeView(v);
}
// 视图进入缓冲区时触发
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = list.get(position);
// 将进入缓冲区的视图对象,添加到容器
container.addView(v);
return v;
}
}
设置适配器
MyPagerAdapter adapter = new MyPagerAdapter(list);
//设置适配器
mPager.setAdapter(adapter);
ViewPager页面滑动监听,需要使用OnPageChangeListener对象来监听
// ViewPager的监听
private ViewPager.OnPageChangeListener pageChange =
new ViewPager.OnPageChangeListener() {
// 页面选中
@Override
public void onPageSelected(int position) {
Log.e("m_tag", "onPageSelected:" + position);
}
// 界面滑动中(position表示滑动中第一个界面的下标,offset表示第一个界面在屏幕外的比例0-1,
第三个参数表示在屏幕外的像素值)
@Override
public void onPageScrolled(int position, float offset,
int offsetInPixels) {
Log.e("m_tag", "onPageScrolled:" + position + " " + offset + " "
+ offsetInPixels);
}
// 滑动的状态
@Override
public void onPageScrollStateChanged(int state) {
Log.e("m_tag", "onPageScrollStateChanged:" + state);
}
};
设置监听
mPager.setOnPageChangeListener(pageChange);
设置选中的位置
mPager.setCurrentItem(index);