一、定义
这是一个相似与ListView的横向滑动的动态View管理控件,它与ListView有很多相似之处,都是对绑定数据源(Adapter)的动态加载,都可以绑定View。
不同:1、首先名字不同,当然这并不重要。
2、方向不同,List是竖向的动态加载,而ViewPage是横向加载。
3、ListView使用的是BasicAdapter或者SimpleAdapter,而ViewPager使用的是PagerAdapter。
这里View可以是布局控件等等一切,因为View是一切控件的父。
等待解决,ViewPager完全可以由Fragment加onTouch来实现,能否替换?性能如何?
二、效果
如右图,就是一个View个管理器,每一个View都是通过inflate来加载的布局。
三、Adapter
1.PagerAdapter 数据源 List<View>
2.FragmentPagerAdapter 数据源 List<Fragment>
3.FragmentStatePagerAdapter 数据源 List<Fragment>
四、代码实现
-----------1、写一个布局文件-------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"<img src="https://img-blog.youkuaiyun.com/20160814200432585?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="right" alt="" />
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
-----------2、写四个布局用于当子布局------------------------
-----------3、写一个PagerAdapter的子类MyAdapter---------------
public class MyAdapter extends PagerAdapter {
private List<View>viewlist;
public MyAdapter(List<View> viewlist) {
this.viewlist = viewlist;
}
@Override
public int getCount() {
return viewlist.size();
}
//用于判断该View是否来自对象
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
//销毁指定的View
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewlist.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewlist.get(position));
return viewlist.get(position);
}
}
-----------4、主类-----------------------
viewPage=(ViewPager)this.findViewById(R.id.vp);
viewPage.setAdapter(new MyAdapter(viewlist));
这里的 instantiateItem()是预加载,一般会事先加载3个,上一个和下一个View,运行的时候会先加载完这三个View,然后才是显示界面。
说明:如果有四个界面分别是1 2 3 4
当前页 加载页 销毁页 下一步操作
1 1 2 --- 右滑
2 3 --- 右滑
3 4 1 右滑
4 --- 2 左滑
3 2 --- 左滑
2 1 4 左滑