这篇文章讲述一些有关于Viewpager的使用


要实现Viewpager,需要两块内容 一个PageAdapter 和监听事件OnPageChangeListener

PageAdapter

ViewPager其实跟ListView差不多 都是通过适配器Adapter来完成布局的

private ViewPager mPager;mPager = (ViewPager) findViewById(R.id.vPager); mPager.setAdapter(new MyPagerAdapter(listViews));public class MyPagerAdapter extends PagerAdapter {public List<View> mListViews;public MyPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mListViews.get(position));}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(mListViews.get(position));return mListViews.get(position);}@Overridepublic boolean isViewFromObject(View view, Object object) {return view==object;}}

这是最简单的实现方式, mListViews是包含V多个iew的一个List

其中必须实现的方式是有四个

getCount()

获取mListViews的长度 返回一个size就行了

isViewFromObject

判断传过来的view是不是object类型的 基本都是view==object

destroyItem

instantiateItem

下面本篇的重点来了
destroyItem和instantiateItem一个是添加view,一个是删除view,所以只讲instantiateItem

public Object instantiateItem(ViewGroup container, int position) {container.addView(mListViews.get(position));return mListViews.get(position);
}

instantiateItem 传进来一个ViewGroup 也就是容器,还有一个position是位置。 viewGroup指的就是调用instantiateItem方法的父view 也就是mPages,而position是指的是点击事件的位置。这个位置具体是怎么获取的呢,其实很简单,将所有的view做成一个list,然后onTouch事件响应点击的位置,再将list中这个位置的索引传过来就行了。

container.addView(mListViews.get(position));

在父View中添加子View
查看源码你会发现,所谓的子View也只是一个ItemInfo的对象

ItemInfo addNewItem(int position, int index) {
ItemInfo ii = new ItemInfo();
ii.position = position;
ii.object = mAdapter.instantiateItem(this, position);
ii.widthFactor = mAdapter.getPageWidth(position);
if (index < 0 || index >= mItems.size()) {mItems.add(ii);
} else {mItems.add(index, ii);
}return ii;
}

ItemInfo的静态对象

static class ItemInfo {Object object;int position;boolean scrolling;float widthFactor;float offset;
}

其实说白了,添加一个view 和添加一个对象差不多吧,只是封装的数据不一样,调用的方法换了个名字而已。

ViewPage详解相关推荐

  1. 安卓-Viewpage详解(1)——广告条

    今天老师讲解Viewpage,讲解的不是很好,因为总是不拿安卓其他的东西进行对比,只是拿着谷歌官方文档翻译,当然有个好处,基本使用我们还是会的. 自己思考,学习一个新的东西,我会拿旧东西,进行对比,然 ...

  2. ReactNative ViewPageAndroid组件详解

    源码传送门 在我们开发Android的时候,ViewPage这个控件的使用频率还是很高的,最简单的就是制作引导页,应用程序的主界面等,在ReactNative开发中实现该功能的组件是ViewPageA ...

  3. ureport2 mysql_Ureport2 安装,配置及问题详解

    Ureport2 安装,配置及问题详解 本文详细介绍了笔者Ureport2的 安装,配置以及在此过程中遇到的问题和解决方法. 本安装 基于 IDEA+SpringBoot, 存储使用mysql数据库 ...

  4. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  5. Ureport2 安装,配置及问题详解

                                                                Ureport2 安装,配置及问题详解 本文详细介绍了笔者Ureport2的 安 ...

  6. Android 各大厂面试题汇总与详解(持续更新)

    介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...

  7. 融云android聊天界面,Android 融云IM集成以及使用详解(一)

    Android 融云IM集成以及使用详解(一) 集成 1.具体的集成步骤就不在详细介绍,我们只说干货,附上融云IM官方文档地址,里面有更为详细的集成介绍 https://www.rongcloud.c ...

  8. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  9. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  10. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

最新文章

  1. centos7 安装rabbitMQ3.6.6
  2. 织梦DedeCMS实现 三级栏目_二级栏目_一级栏目_网站名称 的效果代码
  3. 在javascript中调用java
  4. 李礼辉:如何进行必要的数字金融制度建设等问题值得关注
  5. UVA10990 Another New Function【欧拉函数打表】
  6. sklearn datasets 库使用说明
  7. Kubernetes迁移指北 | 凌云时刻
  8. 基础集合论 第二章 9 族
  9. 从图书馆进入网络刷题练习与考试平台
  10. C语言中数组和字符串长度以及输入输出详解
  11. cpc金价难以琢磨 投行是否成“南郭先生”
  12. 整理一下国内比较便宜的云主机
  13. php--api发送钉钉消息
  14. 电动牙刷也有国产黑马,竟然比千元大牌还厉害 | 钛空实测
  15. 一文贯通→过滤器与拦截器详解
  16. WebRTC系列-RTCDataChannel发送非音视频数据
  17. c语言函数传递坐标值,C语言中,函数间数据传递的方式有三种,即用返回值、参数、全局变量。...
  18. Git从入门到放弃的Day10
  19. 快速破解专业操盘手核心机密(全套)
  20. 结构域对比~HMMER安装及应用

热门文章

  1. 微信小程序获取云数据库数据并对其进行排序
  2. ManjaroLinux安装NVIDIA驱动
  3. 软件测试面试题:简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试?
  4. 宇视摄像机如何快速计算存储容量?
  5. 环境可靠性测试,气候环境类可靠性试验,可靠性测试标准
  6. java异或运算_java中异或怎么运算?
  7. Java中String字符串长度
  8. 二叉树的非递归遍历实现
  9. 在禁用uac_从Windows命令行启用或禁用UAC
  10. →箭头符号大全复制_WORD特殊符号大全lpar;直接复制即可rpar;