android学习ViewPager的简单使用
使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包。主要目的就是解决向下兼容问题。
1,加载显示的页卡
- 将layout布局转换成view对象
(1)LayoutInflater if= getLayoutInflater().from(this);
if.inflater(resource,root);
(2) View.inflate(context,resource,root);
上面第一种方法在之前练习Fragment的时候用过,
- 2,配置adapter
(1)PagerAdapter 数据源:List<View>
(2)FragmentPagerAdapter 数据源 List<Fragment>
(3)FragmentStatPagerAdapter 数据源 List<Fragmnet>
ViewPager和之前学习到的List等控件一样是一个集合,都需要设置数据源,
第一步,先创建3个view布局文件,定义ViewPager控件
view1.xml,
view2.xml,
view3.xml
- <android.support.v4.view.ViewPager
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/viewPager"
- android:layout_gravity="center">
- </android.support.v4.view.ViewPager>
- 第二部,初始化view集合
- private List<View> viewList;
- private ViewPager viewPager;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- viewList = new ArrayList<View>();
- initView();
- }
- private void initView() {
- /*
- 通过view对象作为viewpager的数据源
- */
- viewList.add(View.inflate(getBaseContext(),R.layout.view1,null));
- viewList.add(View.inflate(getBaseContext(), R.layout.view2, null));
- viewList.add(View.inflate(getBaseContext(),R.layout.view3,null));
- }
- 第三部,自定义Pager适配器
- public class MyPagerAdapter extends PagerAdapter {
- private List<View> viewList;public MyPagerAdapter(List<View> viewList){
- this.viewList = viewList;
- }
- //返回的是页卡的数量
- @Override
- public int getCount() {
- return viewList.size();
- }
- //判断当前view对象是否来自于对象
- @Override
- public boolean isViewFromObject(View view, Object o) {
- return view == o;
- }
- //实例化一个页卡
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- //return super.instantiateItem(container, position);
- container.addView(viewList.get(position));
- return viewList.get(position);
- }
- //销毁一个页卡
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- //super.destroyItem(container, position, object);
- container.removeView(viewList.get(position));
- }
- }
第四部,为viewPager设置数据源
- myPagerAdapter = new MyPagerAdapter(viewList,titlePager);
- viewPager = (ViewPager)findViewById(R.id.viewPager);
- viewPager.setAdapter(myPagerAdapter);
上面四步已经可以显示出viewPager的样子了。PagerAdapter类管理view对象,每次实例化前后三个view,当页面切换的时候,会销毁掉多余的view,创建新的view。
第五步,为viewPager创建标题栏
这一步需要在ViewPager的布局文件中加入android.support.v4.view.PagerTabStrip
- <android.support.v4.view.ViewPager
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/viewPager"
- android:layout_gravity="center">
- <android.support.v4.view.PagerTabStrip
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/titlePager">
- </android.support.v4.view.PagerTabStrip>
- </android.support.v4.view.ViewPager>
并且需要初始化标题集合,在适配器中定义标题列表,同时PagerAdapter需要实现下面的方法。
- //设置viewpager的标题
- @Override
- public CharSequence getPageTitle(int position) {
- //return super.getPageTitle(position);
- return titlePager.get(position);
以上一个带标题栏的viewPager就有了,这时我们可以设置一些Title的属性使得标题看起来更加美观一些
- pagerTabStrip.setBackgroundColor(Color.YELLOW);
- pagerTabStrip.setTextColor(Color.RED);
- pagerTabStrip.setDrawFullUnderline(false);
- pagerTabStrip.setTabIndicatorColor(Color.GREEN);
最后一点需要注意的是,可以为ViewPager添加监听事件OnPageChangeListener。
android学习ViewPager的简单使用的更多相关文章
- android学习ProgressBar的简单使用
android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条.Pr ...
- Android学习——ViewPager的使用(三)
这一节来介绍一下在ViewPager中常用到的一个控件,标题栏. 标题栏分为PagerTabStrip和PagerTitleStrip两种,用法类似,这里介绍第一种. 具体做法 在layout文件中的 ...
- Android学习——ViewPager的使用(一)
这一节介绍使用ViewPager,加载ViewPager主要有三部分,数据源.适配器和ViewPager与适配器关联.其中数据源分为View对象和Fragment对象,这一节先来介绍View对象. 数 ...
- android学习9——Handler简单用法
Handler用来发消息和处理消息.典型的用法是更新界面.android不允许在子线程里面更新界面,通常是把Handler传到子线程中,在子线程里通过sendEmptyMessage函数发消息.Han ...
- Android学习——ViewPager的使用(二)
这一节介绍使用FragmentPagerAdapter适配器,来加载Fragment对象. 数据源 加载Fragment对象时,数据源自然来自Fragment,与View类似,依旧使用List来存放数 ...
- [Android学习笔记]Context简单理解
一.Context是什么?上下文对象,可以理解为一个程序的运行的环境,从中可以获取当前程序的资源:getResources,getAssets 二.常见的Context有哪些?Application ...
- Android 学习笔记之如何实现简单相机功能
PS:看来算法和数据结构还是非常有用的,以后每天都练习两道算法题目...这次忘了对代码进行折叠了..导致篇幅过长... 学习内容: 1.Android如何实现相机功能... 2.如何实现音频的录制.. ...
- android学习1:清晰详细android环境搭建,超简单
废话少说,今天是Android学习的开篇的博客,接下来将把自己学习android的各种问题和经历总结一下,其实之前已经自己学过半年了,但是因为开始时刚学的移动端开发还没有概念,当时总结工作又做的不好, ...
- Android学习笔记之图片轮播...
PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...
随机推荐
- AppDelegate减负之常用三方封装 - 友盟推送篇
之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...
- 【总算解决了】A network-related or instance-specific error occurred while establishing a connection to SQL Server
给别人做的网站莫名其妙连接不上数据库.百度了好多,总算知道自己的错在哪了. 报 "A network-related or instance-specific error occurred ...
- 计算机程序的思维逻辑 (91) - Lambda表达式
在之前的章节中,我们的讨论基本都是基于Java 7的,从本节开始,我们探讨Java 8的一些特性,主要内容包括: 传递行为代码 - Lambda表达式 函数式数据处理 - 流 组合式异步编程 - C ...
- Angular路由(三)
AngularJs ng-route路由详解 其实主要是$routeProvider搭配ng-view实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 前提 首先必须在 ...
- 2238"回文字串"报告
题目描述: 回文串,就是从前往后和从后往前看都是一样的字符串.那么现在给你一个字符串,请你找出该字符串中,长度最大的一个回文子串. 输入描述: 有且仅有一个仅包含小写字母的字符串,保证其长度不超过50 ...
- usaco training 3.4.3 fence9 题解
Electric Fence题解 Don Piele In this problem, `lattice points' in the plane are points with integer co ...
- 进击的AssetBundles和它的工具们
0x00 前言 周末的时候在家看了下去年的Unite16 LA的视频.其中一个session很有趣,是AssetBundles开发团队Reichert的一个"总结过往,畅想未来"的 ...
- PostMessage,模拟键盘输入
for i := 0 to length(tel) do begin //SendMessage(cHwnd,WM_KEYDOWN,Integer(tel[ ...
- 标准IO: 文件的打开与关闭函数 fopen & fclose
(1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流&quo ...
- Ambari里如何删除某指定的服务(图文详解)
不多说,直接干货! Ambari 借鉴了很多成熟分布式软件的 API 设计.Rest API 就是一个很好地体现.通过 Ambari 的 Rest API,可以在脚本中通过 curl 维护整个集群.并 ...