ViewPager概述:

Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows.
Note this class is currently under early design and development. The API will likely change in later updates of the compatibility library, requiring changes to the source code of apps when they are compiled against the newer version.
ViewPager is most often used in conjunction with android.app.Fragment, which is a convenient way to supply and manage the lifecycle of each page. There are standard adapters implemented for using fragments with the ViewPager, which cover the most common use cases. These are android.support.v4.app.FragmentPagerAdapter and android.support.v4.app.FragmentStatePagerAdapter; each of these classes have simple code showing how to build a full user interface with them.
Here is a more complicated example of ViewPager, using it in conjuction with android.app.ActionBar tabs. You can find other examples of using ViewPager in the API 4+ Support Demos and API 13+ Support Demos sample code.
 {@sample development/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.java complete}

布局管理器允许用户通过左右滑动的方式浏览数据页面。开发者需要提供产生这些页面的数据适配器---实现PagerAdapter。

值得注意的是,ViewPager这个类目前仍在前期设计和开发阶段,它在今后的兼容包中有可能更新,如果ViewPager在编译时与更新版本冲突就需要修改它的源码。

ViewPager通常与Fragment结合使用,这样可以方便有效的管理各个页面的生命周期。为了让Fragment和ViewPager结合使用,已经有了概含最常见的用例的标准适配器:FragmentPagerAdapter和FragmentStatePagerAdapter.这两个类都是PagerAdapter的子类,都有一些简单的代码来展示如何用他们来创建一个完整的用户接口。

ViewPager有一个更复杂的例子,使用它与ActionBar的tab结合使用。可以在v4和v13支持库的示例代码中找到其他和ViewPager有关的例子。(路径为:development/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.java)

Support13Demos源码下载:http://download.csdn.net/detail/dongdong230/8440129

Support13Demos源码下载:http://download.csdn.net/detail/dongdong230/8440129

ViewPager方法精选:

1.Viewpager继承ViewGroup,需重写其抽象方法OnLayout

protected void onLayout (boolean changed, int l, int t, int r, int b)

调用场景:在view给其孩子设置尺寸和位置时被调用。子view,包括孩子在内,必须重写onLayout(boolean, int, int, int, int)方法,并且调用各自的layout(int, int, int, int)方法

几个参数的含义:

changed view有新的尺寸或位置
l 相对于父view的Left位置
t 相对于父view的Top位置
r 相对于父view的Right位置
b 相对于父view的Bottom位置

这里分别对decor view 和 非decor view进行位置移动,依据是srollx及offset。

2.ViewPager的内部类:LayoutParams:

Layout parameters that should be supplied for views added to a ViewPager。

这是为viewpager页面子view准备的布局参数类。

其中的几个重要字段:

isDecor true:该view是pager自身的而非适配器适配的
gravity 仅为decor view使用,布局子view的位置,常量值在android.view.Gravity中
widthFactor 页面宽度的乘数因子?
needsMeasure true:该view在正layout时被添加,且在布局这个view前需测量
position 非decorview的view所适配的位置

3.ViewPager重要接口OnPageChangeListener:

三个未实现的方法:onPageScrolled、onPageSelected、onPageScrollStateChanged

最常用接口,无需多说。

另有内部类SimpleOnPageChangeListener:实现了OnPageChangeListener方法,但没有写实现代码,如果不想重写OnPageChangeListener所有方法,使用这个内部类即可。

4.滑动动画接口:PageTransformer:页面滑动时所展现的动画效果

transformPage:给指定页面添加滑动动画

5.其他方法

  1. addFocusables:当前显示的页面方可获取焦点
  2. addTouchables:当前显示的页面方可获取触摸事件
  3. addView:根据指定布局参数添加子view
  4. arrowScroll:滑动的方向?
  5. beginFakeDrag:开始控制滑动事件,处于fake drag时,viewpager会忽略掉touch事件
  6. canScrollHorizontally:判断view是否可在指定方向(derection)上水平滑动.derection:负数代表向左,正数代表向右
  7. computeScroll:由父类调用,计算其子类所应滑动的距离
  8. dispatchKeyEvent:分发key事件
  9. dispatchPopulateAccessibilityEvent:分发辅助事件给view,然后将其子类的text content添加到这个事件中。
  10. draw:绘制view及其子view到canvas上。
  11. endFakeDrag:结束控制滑动事件
  12. executeKeyEvent:执行key事件

【Android 界面效果45】ViewPager源码分析的更多相关文章

  1. Android Small插件化框架源码分析

    Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...

  2. ViewPager 源码分析(一) —— setAdapter() 与 populate()

    写在前面 做安卓也有一定时间了,虽然常用控件都已大致掌握,然而随着 Android N 的发布,不自觉的愈发焦虑起来.说来惭愧,Android L 的 Material Design 库里的许多控件都 ...

  3. ViewPager源码分析——滑动切换页面处理过程

    上周客户反馈Contacts快速滑动界面切换tab有明显卡顿,让优化. 自己验证又没发现卡顿现象,但总得给客户一个技术性的回复,于是看了一下ViewPager源码中处理滑动切换tab的过程. View ...

  4. Android View事件分发-从源码分析

    View事件分发-从源码分析 学习自 <Android开发艺术探索> https://blog.csdn.net/qian520ao/article/details/78555397?lo ...

  5. Android JobService的使用及源码分析

    Google在Android 5.0中引入JobScheduler来执行一些需要满足特定条件但不紧急的后台任务,APP利用JobScheduler来执行这些特殊的后台任务时来减少电量的消耗.本文首先介 ...

  6. 【Android】Handler、Looper源码分析

    一.前言 源码分析使用的版本是 4.4.2_r1. Handler和Looper的入门知识以及讲解可以参考我的另外一篇博客:Android Handler机制 简单而言:Handler和Looper是 ...

  7. Android线程间异步通信机制源码分析

    本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务.文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究. 基础 ...

  8. Android 7.0 Gallery图库源码分析3 - 数据加载及显示流程

    前面分析Gallery启动流程时,说了传给DataManager的data的key是AlbumSetPage.KEY_MEDIA_PATH,value值,是”/combo/{/local/all,/p ...

  9. Android服务之PackageManagerService启动源码分析

    了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...

随机推荐

  1. 欧几里德&扩展以及求解线性方程学习总结--附上poj1061解题报告

    欧几里德算法: 欧几里德就是辗转相除法,调用这个gcd(a,b)这个函数求解a,b的最大公约数 公式: gcd(a,b)=gcd(b,a%b):并且gcd(a,b)=gcd(b,a)=gcd(-a,b ...

  2. Java图片处理(一)图片合成

    如何将多个头像合成类似QQ的群头像? 如上图所示,如何用java将单一的图片合成如上群头像. 在一个正方形外框中,要将多个图片合成上述图片.首先要做的是,依据圆相交的程度,计算圆心坐标与图片间空白区域 ...

  3. ASP.NET设置404页面返回302HTTP状态码的解决方法

    在配置文件中配置404页面如下: .代码如下: <customErrors mode="On" defaultRedirect="404.aspx"> ...

  4. InitializingBean和init-method

    [spring的InitializingBean的 afterPropertiesSet 方法 和 init-method配置的 区别联系] InitializingBean Spring的Initi ...

  5. Combox选中项注意事项

    一般我们选中某个combox的下拉框会用如下方式: 1.combox.SelectedIndex=下拉框下标,如0是选中第一个.-1是不选中任何项等等: 2.combox.SelectedItem=某 ...

  6. 用Log4Net记录NHibernate中执行的SQL语句及执行时间

    首页,在web.config中加入以下配置: <configuration> <configSections> <section name="log4net&q ...

  7. 升级xcode时更换appid账户

    转自:http://blog.csdn.net/zhuzhihai1988/article/details/39803743 为了免下载安装Xcode,安装时使用了别人提供的Xcode.dmg安装,而 ...

  8. Unable to execute dex: Multiple dex files define 解决方法

    程序编译正常,在用Eclipse调试执行时,报错Unable to execute dex: Multiple dex files define: 方法:      原因是有重复的.jar被引用,可以 ...

  9. Don’t use Suspend and Resume, but don’t poll either.

    http://www.paradicesoftware.com/blog/2014/02/dont-use-suspend-and-resume-but-dont-poll-either/ Don’t ...

  10. 手游产品经理初探(六)粗糙的logo会给产品致命一击

    假设你的游戏产品从logo的设计開始就不注重细节的话,那么你的产品将不会走多远! 我们把图片放大看: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1 ...