ViewPager 的使用,轮播和设置点击事件

ViewPager

ViewPager提供了多界面的切换效果

<1>当前显示一组界面中的其中一个界面;

<2>当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分;

<3>滑动结束后,界面自动跳转到当前选择的界面中。

android-support-v4.jar 是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与ListView类似,我们也需要一个适配器,他就是PagerAdapter

View Page 对应官方文档地址:

http://developer.android.com/reference/android/support/v4/view/ViewPager.html

具体Xml中定义

 

ViewPager添加addview)的用法

 

PagerAdapter介绍和具体使用

 

PagerAdapter介绍和具体使用

适配器这个东东想必大家都不莫生,在ListView中也有适配器,listView通过重写GetView()函数来获取当前要加载的Item。而PageAdapter不太相同,毕竟PageAdapter是单个VIew的合集。

PageAdapter 必须重写的四个函数:

boolean isViewFromObject(View arg0, Object arg1)

功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)

返回值:如果对应的是同一个View,返回True,否则返回False

int getCount()

返回当前有效视图的个数

void destroyItem(ViewGroup container, int position,Object object)

该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除

Object instantiateItem(ViewGroup container, int position)

这个函数的实现的功能是创建指定位置的页面视图。适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时this is be done!

返回值:返回一个代表新增视图页面的ObjectKey),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key(最后我们举个例子试试可不可行)

上面咱们说了ViewPage添加View的案例,其实添加Fragment也是同理,只用把View换成咱们的Fragment就可以了。

添加View的时候,咱们用的Adapter,添加Fragment的时候,看下面的适配器:

 

如何实现轮播图:

所谓设置轮播就是多长时间跳转到以一张图,那我们怎么去实现它的

ViewPager中有这样的几个方法

getCurrentItem();这个方法是当前界面的索引

setCurrentItem(int item);这个方法是设置指定索引界面

使用Handler机制

 Handler handler=new Handler(){

        @Override

        public void handleMessage(Message msg) {

            super.handleMessage(msg);

            //该方法用来获取viewpager的当前页面的索引

            int currentPage=viewpager.getCurrentItem();//设置当前页面  0

            int nextPage=currentPage+1==fragments.size()?0:currentPage+1;//1

            //viewpager设置当前的page  为多少

            viewpager.setCurrentItem(nextPage);

            if (nextPage +1== fragments.size()) {//3

                Toast.makeText(MainActivity.this, "您已经滑倒了最后一页了", Toast.LENGTH_SHORT).show();

                return;

            }

            sendEmptyMessageDelayed(0,4000);

        }

};

这个得现在 onCreate中去发送一条消息

//这个方法表示延迟2秒后在发送handler消息  1表示tab值就是在handlmessage里面的msg.what

        //的值   2 表示延迟的时间

        handler.sendEmptyMessageDelayed(0,4000);

ViewPager设置监听事件

addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override//正在滑动

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                System.out.println("滑动中");

            }

            @Override//选中了那个pager 也表示当前显示那个pager

            public void onPageSelected(int position) {

                System.out.println("当前选中的page==="+position);

            }

            @Override//page的状态发生改变  page1  切换到pager2  该方法调用

            public void onPageScrollStateChanged(int state) {

                System.out.println("当前选中的装填为"+state);

            }

        });

猜你喜欢

转载自blog.csdn.net/zeyu_rensheng/article/details/80291491
今日推荐