在布局文件中定义ViewPager的位置
<android.support.v4.view.ViewPager
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/viewpager"
/>
ViewPager pager=(ViewPager)findViewById(R.id.viewpager);
接着pager.setAdapter(new MyPagerAdapter(views));
其中views是个List<View>的集合
views=new ArrayList<View>();
LayoutInflater mLi = LayoutInflater.from(this);
View view1 = mLi.inflate(R.layout.view1, null);
View view2 = mLi.inflate(R.layout.view2, null);
View view3 = mLi.inflate(R.layout.view3, null);
views.add(view3);
views.add(view2);
views.add(view1);
Activity做的事就这么多,接下来就是适配器了。
MyPagerAdapter继承于PagerAdapter,默认要重写2个方法,不过如果要正确实现划屏换面功能至少需重写4个方法。
@Override
public int getCount() {
// TODO Auto-generated method stub
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
如上:第一个方法表示要显示的view的个数。第二个方法的返回值决定了划屏之后屏幕画不画View
第三个方法是给屏幕填充view,第四个方法是滑到另一个view时之前的viewdestroy掉。
由于没有源码,不知道其中是怎么执行的,所以接下来全是猜测了:
1.我把第2个方法改为返回false,屏幕没东西,改为true,3个view全叠加到第一个界面了。
2.我把container.addView(views.get(position));去掉,3个view全不显示。
3.我把views.get(position)中的position改为固定值,显示就乱了,而且只显示一个view,就是views.get(position)的view。
由上面的测试,我猜测第2个方法中的arg0为第三个方法中的container的container.getChildAt(position)返回值,arg1为第三个方法中的返回值。