使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包。主要目的就是解决向下兼容问题。

  1,加载显示的页卡

  1.   将layout布局转换成view对象
      1LayoutInflater if= getLayoutInflater().from(this);
       if.inflater(resource,root);
    (2) View.inflate(context,resource,root);
      上面第一种方法在之前练习Fragment的时候用过,
  1.  2,配置adapter
      1PagerAdapter 数据源:List<View>
      2FragmentPagerAdapter 数据源 List<Fragment>
      3FragmentStatPagerAdapter 数据源 List<Fragmnet>
      ViewPager和之前学习到的List等控件一样是一个集合,都需要设置数据源,
    第一步,先创建3view布局文件,定义ViewPager控件
      view1.xml,
      view2.xml,
      view3.xml
  1. <android.support.v4.view.ViewPager
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:id="@+id/viewPager"
  5. android:layout_gravity="center">
  6. </android.support.v4.view.ViewPager>
  1.  第二部,初始化view集合
  1. private List<View> viewList;
  2. private ViewPager viewPager;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. viewList = new ArrayList<View>();
  8. initView();
  9. }
  10.  
  11. private void initView() {
  12. /*
  13. 通过view对象作为viewpager的数据源
  14. */
  15. viewList.add(View.inflate(getBaseContext(),R.layout.view1,null));
  16. viewList.add(View.inflate(getBaseContext(), R.layout.view2, null));
  17. viewList.add(View.inflate(getBaseContext(),R.layout.view3,null));
  18.  
  19. }
  1. 第三部,自定义Pager适配器
  1. public class MyPagerAdapter extends PagerAdapter {
  2.  
  3. private List<View> viewList;public MyPagerAdapter(List<View> viewList){
  4.  
  5. this.viewList = viewList;
  6. }
  7.  
  8. //返回的是页卡的数量
  9. @Override
  10. public int getCount() {
  11. return viewList.size();
  12. }
  13.  
  14. //判断当前view对象是否来自于对象
  15.  
  16. @Override
  17. public boolean isViewFromObject(View view, Object o) {
  18. return view == o;
  19. }
  20.  
  21. //实例化一个页卡
  22. @Override
  23. public Object instantiateItem(ViewGroup container, int position) {
  24. //return super.instantiateItem(container, position);
  25. container.addView(viewList.get(position));
  26. return viewList.get(position);
  27. }
  28.  
  29. //销毁一个页卡
  30. @Override
  31. public void destroyItem(ViewGroup container, int position, Object object) {
  32. //super.destroyItem(container, position, object);
  33. container.removeView(viewList.get(position));
  34. }
  35.  
  36. }

  第四部,为viewPager设置数据源

  1. myPagerAdapter = new MyPagerAdapter(viewList,titlePager);
  2. viewPager = (ViewPager)findViewById(R.id.viewPager);
  3. viewPager.setAdapter(myPagerAdapter);

  上面四步已经可以显示出viewPager的样子了。PagerAdapter类管理view对象,每次实例化前后三个view,当页面切换的时候,会销毁掉多余的view,创建新的view。

  第五步,为viewPager创建标题栏

  这一步需要在ViewPager的布局文件中加入android.support.v4.view.PagerTabStrip

  1. <android.support.v4.view.ViewPager
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:id="@+id/viewPager"
  5. android:layout_gravity="center">
  6. <android.support.v4.view.PagerTabStrip
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/titlePager">
  10.  
  11. </android.support.v4.view.PagerTabStrip>
  12.  
  13. </android.support.v4.view.ViewPager>

  并且需要初始化标题集合,在适配器中定义标题列表,同时PagerAdapter需要实现下面的方法。

  1. //设置viewpager的标题
  2. @Override
  3. public CharSequence getPageTitle(int position) {
  4. //return super.getPageTitle(position);
  5. return titlePager.get(position);

  以上一个带标题栏的viewPager就有了,这时我们可以设置一些Title的属性使得标题看起来更加美观一些

  1. pagerTabStrip.setBackgroundColor(Color.YELLOW);
  2. pagerTabStrip.setTextColor(Color.RED);
  3. pagerTabStrip.setDrawFullUnderline(false);
  4. pagerTabStrip.setTabIndicatorColor(Color.GREEN);

  最后一点需要注意的是,可以为ViewPager添加监听事件OnPageChangeListener。

  1.  
  1.  

android学习ViewPager的简单使用的更多相关文章

  1. android学习ProgressBar的简单使用

    android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条.Pr ...

  2. Android学习——ViewPager的使用(三)

    这一节来介绍一下在ViewPager中常用到的一个控件,标题栏. 标题栏分为PagerTabStrip和PagerTitleStrip两种,用法类似,这里介绍第一种. 具体做法 在layout文件中的 ...

  3. Android学习——ViewPager的使用(一)

    这一节介绍使用ViewPager,加载ViewPager主要有三部分,数据源.适配器和ViewPager与适配器关联.其中数据源分为View对象和Fragment对象,这一节先来介绍View对象. 数 ...

  4. android学习9——Handler简单用法

    Handler用来发消息和处理消息.典型的用法是更新界面.android不允许在子线程里面更新界面,通常是把Handler传到子线程中,在子线程里通过sendEmptyMessage函数发消息.Han ...

  5. Android学习——ViewPager的使用(二)

    这一节介绍使用FragmentPagerAdapter适配器,来加载Fragment对象. 数据源 加载Fragment对象时,数据源自然来自Fragment,与View类似,依旧使用List来存放数 ...

  6. [Android学习笔记]Context简单理解

    一.Context是什么?上下文对象,可以理解为一个程序的运行的环境,从中可以获取当前程序的资源:getResources,getAssets 二.常见的Context有哪些?Application ...

  7. Android 学习笔记之如何实现简单相机功能

    PS:看来算法和数据结构还是非常有用的,以后每天都练习两道算法题目...这次忘了对代码进行折叠了..导致篇幅过长... 学习内容: 1.Android如何实现相机功能... 2.如何实现音频的录制.. ...

  8. android学习1:清晰详细android环境搭建,超简单

    废话少说,今天是Android学习的开篇的博客,接下来将把自己学习android的各种问题和经历总结一下,其实之前已经自己学过半年了,但是因为开始时刚学的移动端开发还没有概念,当时总结工作又做的不好, ...

  9. Android学习笔记之图片轮播...

    PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...

随机推荐

  1. AppDelegate减负之常用三方封装 - 友盟推送篇

    之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...

  2. 【总算解决了】A network-related or instance-specific error occurred while establishing a connection to SQL Server

    给别人做的网站莫名其妙连接不上数据库.百度了好多,总算知道自己的错在哪了. 报 "A network-related or instance-specific error occurred  ...

  3. 计算机程序的思维逻辑 (91) - Lambda表达式

    ​在之前的章节中,我们的讨论基本都是基于Java 7的,从本节开始,我们探讨Java 8的一些特性,主要内容包括: 传递行为代码 - Lambda表达式 函数式数据处理 - 流 组合式异步编程 - C ...

  4. Angular路由(三)

    AngularJs ng-route路由详解 其实主要是$routeProvider搭配ng-view实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 前提 首先必须在 ...

  5. 2238"回文字串"报告

    题目描述: 回文串,就是从前往后和从后往前看都是一样的字符串.那么现在给你一个字符串,请你找出该字符串中,长度最大的一个回文子串. 输入描述: 有且仅有一个仅包含小写字母的字符串,保证其长度不超过50 ...

  6. usaco training 3.4.3 fence9 题解

    Electric Fence题解 Don Piele In this problem, `lattice points' in the plane are points with integer co ...

  7. 进击的AssetBundles和它的工具们

    0x00 前言 周末的时候在家看了下去年的Unite16 LA的视频.其中一个session很有趣,是AssetBundles开发团队Reichert的一个"总结过往,畅想未来"的 ...

  8. PostMessage,模拟键盘输入

    for i := 0 to length(tel) do           begin             //SendMessage(cHwnd,WM_KEYDOWN,Integer(tel[ ...

  9. 标准IO: 文件的打开与关闭函数 fopen & fclose

    (1) 流(stream)和文件(file)    流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流&quo ...

  10. Ambari里如何删除某指定的服务(图文详解)

    不多说,直接干货! Ambari 借鉴了很多成熟分布式软件的 API 设计.Rest API 就是一个很好地体现.通过 Ambari 的 Rest API,可以在脚本中通过 curl 维护整个集群.并 ...