【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.其他方法

  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事件
时间: 2024-10-16 14:33:03

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

Android Small插件化框架源码分析

Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github.com/wequick/Small 插件化的方案,说到底要解决的核心问题只有三个: 1.1 插件类的加载 这个问题的解决和其它插件化框架的解决方法差不多.Android的类是由DexClassLoader加载的,通过反射可以将插件包动态加载进去.Small的gradle插件生成的是.so包,在初始

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

写在前面 做安卓也有一定时间了,虽然常用控件都已大致掌握,然而随着 Android N 的发布,不自觉的愈发焦虑起来.说来惭愧,Android L 的 Material Design 库里的许多控件都还没用过,照这样下去迟早要被新技术所淘汰.那该怎么办呢,偶然间我看到一篇博文如此说到:"不要觉得 android 里边控件繁杂多样,官方或第三方新控件层出不穷,其实真正的控件就只有两个View和ViewGroup.一旦有了它们的基础,不管来什么新控件,TabLayout也好,CoordinatorL

Android之rild进程启动源码分析

Android 电话系统框架介绍 在android系统中rild运行在AP上,AP上的应用通过rild发送AT指令给BP,BP接收到信息后又通过rild传送给AP.AP与BP之间有两种通信方式: 1.Solicited Response:Ap向Bp发送请求,Bp给Ap发送回复,该类型的AT指令及其回调函数以数组的形式存放在Ril_commands.h文件中: {数组中的索引号,请求回调函数,响应回调函数} [plain] view plaincopy {0, NULL, NULL},      

ViewPager源码分析

1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返. 那么,关于ViewPager有什么问题呢? 1. setOffsreenPageLimit()方法是如何实现页面缓存的? 2. 在布局文件中,ViewPager布局内部能否添加其他View? 3. 为什么ViewPager初始化时,显示了一个页面却不会触发onPageSelected回调? 问题肯定不止这三个,但是有这三个问题基本

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

上周客户反馈Contacts快速滑动界面切换tab有明显卡顿,让优化. 自己验证又没发现卡顿现象,但总得给客户一个技术性的回复,于是看了一下ViewPager源码中处理滑动切换tab的过程. ViewPager  源码位置: android\frameworks\support\v4\java\android\support\v4\view\ViewPager.java ViewPager其实就是一个重写的ViewGroup,使用ViewPager可以参考SDK中的demo:sdk\extras

【Android】Handler、Looper源码分析

一.前言 源码分析使用的版本是 4.4.2_r1. Handler和Looper的入门知识以及讲解可以参考我的另外一篇博客:Android Handler机制 简单而言:Handler和Looper是对某一个线程实现消息机制的重要组成部分,另外两个重要元素是Message和MessageQueue,通过这四个类,可以让某个线程具备接收.处理消息的能力. 二.源码剖析 虽然只有四个类,而且这里只是剖析其中两个,但是也不能独立分析,必须组合进行解析.切入点是类Looper的注释中的一段示例代码: 1

Android JobService的使用及源码分析

Google在Android 5.0中引入JobScheduler来执行一些需要满足特定条件但不紧急的后台任务,APP利用JobScheduler来执行这些特殊的后台任务时来减少电量的消耗.本文首先介绍JobSerice的使用方法,然后分析JobService的源码实现. JobService的使用 使用JobScheduler的时候需要把待执行的后台任务封装到JobService中提交.下面就来介绍JobService的使用,首先看一下JobService是什么东东. 从上面的截图,可以看出J

Android 资源加载Resources源码分析(8.0)

我们熟悉的资源加载代码: 1.Activity.getResources(); 2.Context.getResources(); 这2种方式获取的都是Resources对象 先看第一种获取Resources对象源码分析: 说明:(AppcompatActivity中getResource()方法与Activity.getResources()是有区别的.AppcompatActivity是new Resources(...)对象) 一:Activity.getResources()源码分析:

Android异步任务处理框架AsyncTask源码分析

[转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 引言 在平时项目开发中难免会遇到异步耗时的任务(比如最常见的网络请求).遇到这种问题,我们可以自己通过Handler+Message+Thread/ThreadPool来构造一个异步耗时任务框架.当你下次项目中又遇到一个网络请求,你又不得不重写异步耗时任务处理框架.出于避免开发者重复搬砖工作,Google工程师给开发者搭建了一个通用的异步耗时任务处理框架--AsyncTask. Asyn

android缓存系列:ASimpleCache源码分析

接触Acache是因为阅读oschina的开源android端代码,发现oschina采用了该框架缓存新闻分页数据.后来知道这是个杨福海的开源项目,他还开源过afinal框架,项目的地址如下: https://github.com/yangfuhai/ASimpleCache 一.官方介绍 ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架.轻量到只有一个java文件(由十几个类精简而来). 1.它可以缓存什么东西? 普通的字符串.JsonObject.JsonArr