一、ViewPager是什么
官方介绍是:
Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows.
意思是:布局管理器,允许用户通过数据页左右翻转。您提供了一个PagerAdapter的实现来生成视图显示的页面。
ViewPager是v4包中的一个类,继承自ViewGroup,其实是一个容器,需要一个PagerAdapter适配器类给它提供数据,经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
二、ViewPager的简单使用
首先定义两个layout:
view1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0000ff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
/>
</LinearLayout>
view2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ff00">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"/>
</LinearLayout>
在布局文件中添加标签:
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在代码中设置数据
获取控件
ViewPager vp = (ViewPager) findViewById(R.id.vp);
自定义类继承PagerAdapter填充页面和数据:
PaerAdpter必须重写的四个方法
boolean isViewFromObject(View arg0, Object arg1) //用来判断一个页面视图是否和instantiateItem方法返回的object有关联
int getCount() //返回要滑动的View的个数
void destroyItem(ViewGroup container, int position,Object object) //从当前container中删除指定位置(position)的View;
Object instantiateItem(ViewGroup container, int position) //将当前视图添加到container中和返回当前View
MyPagerAdapter.class
public class MyPagerAdapter extends PagerAdapter {
private List<View> pageList;
public MyPagerAdapter(List<View> pageList) {
this.pageList = pageList;
}
@Override
public int getCount() {
return pageList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(pageList.get(position));
return pageList.get(position);
}
在mainactivity中设置适配器和数据
public class MainActivity extends AppCompatActivity {
private ViewPager vp;
private MyPagerAdapter pagerAdapter;
private List<View> list;
private View view1, view2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
LayoutInflater inflater=getLayoutInflater();
view1 = inflater.inflate(R.layout.view1, null);
view2 = inflater.inflate(R.layout.view2,null);
list = new ArrayList<>();
list.add(view1);
list.add(view2);
pagerAdapter = new MyPagerAdapter(list);
vp.setAdapter(pagerAdapter);
}
}
最后效果如图: