【Android 界面效果45】ViewPager源码分析
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.其他方法
- addFocusables:当前显示的页面方可获取焦点
- addTouchables:当前显示的页面方可获取触摸事件
- addView:根据指定布局参数添加子view
- arrowScroll:滑动的方向?
- beginFakeDrag:开始控制滑动事件,处于fake drag时,viewpager会忽略掉touch事件
- canScrollHorizontally:判断view是否可在指定方向(derection)上水平滑动.derection:负数代表向左,正数代表向右
- computeScroll:由父类调用,计算其子类所应滑动的距离
- dispatchKeyEvent:分发key事件
- dispatchPopulateAccessibilityEvent:分发辅助事件给view,然后将其子类的text content添加到这个事件中。
- draw:绘制view及其子view到canvas上。
- endFakeDrag:结束控制滑动事件
- executeKeyEvent:执行key事件
【Android 界面效果45】ViewPager源码分析的更多相关文章
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- ViewPager 源码分析(一) —— setAdapter() 与 populate()
写在前面 做安卓也有一定时间了,虽然常用控件都已大致掌握,然而随着 Android N 的发布,不自觉的愈发焦虑起来.说来惭愧,Android L 的 Material Design 库里的许多控件都 ...
- ViewPager源码分析——滑动切换页面处理过程
上周客户反馈Contacts快速滑动界面切换tab有明显卡顿,让优化. 自己验证又没发现卡顿现象,但总得给客户一个技术性的回复,于是看了一下ViewPager源码中处理滑动切换tab的过程. View ...
- Android View事件分发-从源码分析
View事件分发-从源码分析 学习自 <Android开发艺术探索> https://blog.csdn.net/qian520ao/article/details/78555397?lo ...
- Android JobService的使用及源码分析
Google在Android 5.0中引入JobScheduler来执行一些需要满足特定条件但不紧急的后台任务,APP利用JobScheduler来执行这些特殊的后台任务时来减少电量的消耗.本文首先介 ...
- 【Android】Handler、Looper源码分析
一.前言 源码分析使用的版本是 4.4.2_r1. Handler和Looper的入门知识以及讲解可以参考我的另外一篇博客:Android Handler机制 简单而言:Handler和Looper是 ...
- Android线程间异步通信机制源码分析
本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务.文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究. 基础 ...
- Android 7.0 Gallery图库源码分析3 - 数据加载及显示流程
前面分析Gallery启动流程时,说了传给DataManager的data的key是AlbumSetPage.KEY_MEDIA_PATH,value值,是”/combo/{/local/all,/p ...
- Android服务之PackageManagerService启动源码分析
了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...
随机推荐
- 将表A的数据复制到表B,以及关于主表和子表的删除办法
如果表A的数据结构和表B的数据结构是一样的,字段名字可以不用相同,但是对应的数据类型是一样的 这样的情况下可以用如下的方式实现将表A的数据复制到表B INSERT INTO #TEMP2 SELECT ...
- 【LeetCode】 Subsets
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- ACM数学问题分类(汇总帖)
数论 组合数学 计算几何 博弈论 线性代数 高等数学 线性规划 概率统计
- OC:属性、点语法、KVC
//属性的属性 属性定义在一个 .h文件里,在这个.h文件里可以定义实例变量(就是这个类的特征),也可以通过 @protery(属性约束关键字) 属性名字类型 属性名 来定义一些属性,在prope ...
- [转] [Visual Studio 2012] 找回 建立單元測試 選單
原文链接:http://www.dotblogs.com.tw/yc421206/archive/2013/03/08/95920.aspx Step1.建立選單 在VS2012選單,Tools→Cu ...
- C#自定义控件背景色透明的方法
I struggled for ages with the problem of having controls show through a control that was painted on ...
- jquery checkbox选中状态
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jsp与El,jstl知识点总结归纳
jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...
- extjs表格下的分页条——Ext.grid.Panel 的 pagingtoolbar
两种分页条:每页固定条数的分页条 和 自定义选择每页内容条数的分页条 一.每页固定条数的分页条 这种样式的-- dockedItems: [{ xtype: 'pagingtoolbar', stor ...
- MFC容器类介绍
我们知道如果是单个的少数几个值弄些int , long,float ,double等类型的变量来装这些值就行了.但如果值太多这样就比较麻烦.当然数据超级多时就直接放数据库里存着去了. 但如果数值不多不 ...