zoukankan      html  css  js  c++  java
  • Android ViewPager

    VeiwPager 是一个ViewGroup,可以包含很多的View,当手指在屏幕上左右滑动的时候,可以切换界面。可以做很多事情,从最简单的导航,到页面菜单等。用法与ListView类似,也需要一个适配器,就是PagerAdapter。

    ViewPager一般与Fragment结合使用比较方便。

    ViewPager+Fragment可以做出多页面滑动的效果,让我们的应用程序界面操作起来更加灵活

    ViewPager滑动事件讲解:

    首先ViewPager在处理滑动事件时要用到OnPageChangeListener

    OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected)

    onPageScrollStateChanged(int arg0)   ,此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1的时表示正在滑动,arg0==2的时表示滑动完毕了,arg0==0的时表示什么都没做。

    onPageScrolled(int arg0,float arg1,int arg2)    ,当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为:

    arg0 :当前页面,及你点击滑动的页面

    arg1:当前页面偏移的百分比

    arg2:当前页面偏移的像素位置   

    onPageSelected(int arg0) :此方法是页面跳转完后得到调用,arg0是你当前选中的页面的Position(位置编号)。

     一、使用ViewPager

      ViewPager的使用与ListView使用类似,也要绑定相应的适配器。

      ViewPager的使用主要分3个步骤:

      1、在布局文件中添加ViewPager控件。注意:写这个控件的时候要写全称(包名+类名)

    <android.support.v4.view.ViewPager
    android:id="@+id/main_viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rg">

    <android.support.v4.view.PagerTabStrip
    android:id="@+id/pagertab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top" />
    </android.support.v4.view.ViewPager>

     PagerTabTrip要当做ViewPager的一个子标签来用,可以用android:layout_gravity=TOP|BOTTOM来制定title的位置,如果要显示出PagerTabTrip的某一项Title,需要在ViewPager的Adapter中实现getPageTitle(int)。

    instantiateItem(ViewGroup,int)//实例化页卡
    
    destroyItem(ViewGroup,int,Object)//删除页卡
    
    getCount()//返回页卡的数量
    
    isViewFromObject(View,Object)//判断两个对象是否相等
    
    getPageTitle(int position)//设置标签显示的标题

    设置指示标签的属性:

    pagerTabStrip.setTabIndicatorColor();//指示器的颜色
    
    pagerTabStrip.setBackgroundColor();//背景色
    
    pagerTabStrip.setTextColor(Color.WHITE);//设置字体颜色

    2、加载要显示的界面,并把要显示的页面放入数组或List集合中

    LayoutInflater lf = getLayoutInflater().from(this);  
    
          view1 = lf.inflate(R.layout.layout1, null);  
    
          view2 = lf.inflate(R.layout.layout2, null);  
    
          view3 = lf.inflate(R.layout.layout3, null);  
    
          
    
          viewList = new ArrayList<View>();
    
          viewList.add(view1);  
    
          viewList.add(view2);  
    
          viewList.add(view3);  

      3、在Activity里实例化ViewPager组件,并设置它的Adapter,一般需要重写PagerAdapter。(和ListView使用差不多,使用步骤也类似。)

     

    ViewPager的方法:

    1. setAdapter():ViewPager通过setAdapter()来建立与PagerAdapter的联系。这个联系是双向的,一方面,,ViewPager会拥有PagerAdapter对象,从而可调用PagerAdapter的方法,另一方面,ViewPager会在setAdapter()中调用PagerAdapter的registerDataSetObserver()方法,注册一个自己生成的PagerObserver 对象,从而在 PagerAdapter 有所需要时(如 notifyDataSetChanged() notifyDataSetInvalidated() 时),可以调用 Observer onChanged() onInvalidated() 方法,从而实现 PagerAdapter ViewPager 方向发送信息。
    2. dataSetChanged():在 PagerObserver.onChanged(),以及 PagerObserver.onInvalide() 中被调用。因此当 PagerAdapter.notifyDataSetChanged() 被触发时,ViewPager.dataSetChanged() 也可以被触发。该函数将使用 getItemPosition() 的返回值来进行判断,如果为 POSITION_UNCHANGED,则什么都不做;如果为 POSITION_NONE,则调用 PagerAdapter.destroyItem() 来去掉该对象,并设置为需要刷新 (needPopulate = true) 以便触发 PagerAdapter.instantiateItem() 来生成新的对象。

    二、PagerAdapter

        PagerAdapter是ViewPager的支持者,ViewPager将调用它来取得所需展示的页面,而PagerAdapter也会在数据变化时通知ViewPager。这个类也是FragmentPagerAdapter以及FragmentStatePagerAdapter的基类。如果继承此类,至少需要实现instantiateItem(),destroyItem(),getCount()以及isViewFromObject()四个方法。

    • instantiateItem():在每次ViewPager需要一个用以显示Object的时候,该方法都会被ViewPager.addNewItem()方法调用。该方法内部一定要把指定位置要显示的视图添加到ViewPager中。
    • destroyItem():从当前的ViewPager容器中删除指定位置的View对象。
    • getCount():返回要滑动的View的个数。
    • isViewFromObject():该方法用来判断instantiateItem(ViewGroup , int)函数所返回来的key与一个页面视图是否是代表的同一个视图(即他俩是否是对应的,对应的表示同一个view) 返回值:如果对应的是同一个View,返回ture,否则返回false

    三、ViewPager添加标题

    1. 给ViewPager添加一个子标签
    <android.support.v4.view.PagerTitleStrip
    android:id="@+id/pagerTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top"/>

    2.覆写PagerAdapter的getPageTitle(position)方法,该方法返回每个界面的title

    1. @Override
    2. public CharSequence getPageTitle(int position){}

    注意:还有一种标题是android.support.v4.view.PagerTabStrip用法与上面的完全一样,唯一区别就是每个标题下面添加了一个下划线,并且标题也可点击

    四、给ViewPager添加监听器OnPageChageListner

    pager.setOnPageChangeListener(new OnPageChangeListener() {
                /**
                 * 当滑动结束后,新的pager完全显示到屏幕后会调用该方法
                 *  参数:新的pager的index
                 */
                @Override
                public void onPageSelected(int arg0) {
                    // Log.e(TAG, "onPageSelected..." + arg0);
                }
    
                /**
                 * 当正在滑动时,会一直回调该方法 
                 * arg0 :当前页面,及你点击滑动的页面
                 * arg1:当前页面偏移的百分比
                 * arg2:当前页面偏移的像素位置
                 */
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
    //                Log.e(TAG, "onPageScrolled..." + arg0 + "  " + arg1 + "   " + arg2);
                }
                /**
                 * 当状态方法改变的时候调用
                 * 参数:页面的状态
                 * 共有三种状态:    
                 * SCROLL_STATE_IDLE   页面静止的时候的状态
                   SCROLL_STATE_DRAGGING  正在滑动的状态
                   SCROLL_STATE_SETTLING  到了要滑动的最终位置的状态
                 */
                @Override
                public void onPageScrollStateChanged(int arg0) {
    //                
                    String msg = "";
                    switch (arg0) {
                    case ViewPager.SCROLL_STATE_DRAGGING:
                        msg = "正在滑动";
                        break;
                    case ViewPager.SCROLL_STATE_IDLE:
                        msg = "静止了";
                        break;
                    case ViewPager.SCROLL_STATE_SETTLING:
                        msg = "到了";
                        break;
    
                    default:
                        break;
                    }
                    Log.e(TAG, "onPageScrollStateChanged..." + msg);
                }
            });
  • 相关阅读:
    Ubuntu14.04LTS系统QQ的安装:pidgin-lwqq
    Ubuntu14.04LTS系统输入法的安装
    Linux系统安装及初始化(ubuntu14.04)
    创建RAID并永久挂载RAID
    磁盘管理和磁盘配额
    用户账号组账号概述
    安装及管理程序
    目录和文件管理
    Vi编辑器的工作模式
    Linux命令及使用方法
  • 原文地址:https://www.cnblogs.com/chhom/p/5591609.html
Copyright © 2011-2022 走看看