初识ViewPager

一、定义

这是一个相似与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		  左滑


至此,大概记录完毕。如有问题,敬请提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值