许多APP在第一次启动的时候,都会有welcome page。近日尝试利用ViewPager来实现Welcome Page。

d0711 完成记录,跟新下载地址

========================================================================

  • 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.

    android API http://www.android-doc.com/reference/android/support/v4/view/ViewPager.html

  • ViewPager使用方法

    • Step1
      准备好切换用的Layout布局文件(view类)

      这里需要用LayoutInflater来定位。LayoutInflater与findViewById的区别见下。

      LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化

      findViewById()是找xml布局文件下的具体widget控件 (如Button、TextView等)

    • Step2
      创建一个View类型的list,把需要添加的view放入该list。

      上面两步的示例代码见下:

      views=new ArrayList<View>();
      LayoutInflater inflater=getLayoutInflater();
      view1=inflater.inflate(R.layout.welcome1, null);
      view2=inflater.inflate(R.layout.welcome2, null);
      view3=inflater.inflate(R.layout.welcome3, null);
      views.add(view1);views.add(view2);views.add(view3);
    • Step3
      由于我们的ViewPager需要设置一个Adapter,故我们需要新建一个自己的Adapter类来继承PagerAdapter

      这个类必须重写这四个函数,对于此具体的分析可见该博客:http://blog.csdn.net/harvic880925/article/details/38487149

      下面是最简单的重写:

      public class MyViewPagerAdapter extends PagerAdapter{
      private List<View> mListViews; public MyViewPagerAdapter(List<View> mListViews) {
      this.mListViews = mListViews;
      } /*
      * Remove a page for the given position.
      * The adapter is responsible for removing the view from its container
      * although it only must ensure this is done by the time it returns
      * 该方法实现的功能是移除一个给定位置的页面
      *
      */
      @Override
      public void destroyItem(ViewGroup container, int position, Object object) {
      container.removeView(mListViews.get(position));
      } /*
      * Create the page for the given position.
      * The adapter is responsible for adding the view to the container given here,
      * although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup).
      * 该方法实现的功能是添加一个给定位置的页面到容器
      */
      @Override
      public Object instantiateItem(ViewGroup container, int position) {
      container.addView(mListViews.get(position), 0);
      return mListViews.get(position);
      } /*
      * 获取view的数量
      */
      @Override
      public int getCount() {
      return mListViews.size();
      } /*
      * Determines whether a page View is associated with a specific key object as returned by instantiateItem(ViewGroup, int).
      * This method is required for a PagerAdapter to function properly.
      *
      */
      @Override
      public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0==arg1;
      }
      }
    • Step4

      实例化ViewPager类,并将views通过MyViewPagerAdapter来设置为ViewPager的Adapter。同时设置当前页,同时可以设置页面转换的监听器

      viewPager=(ViewPager) findViewById(R.id.vPager);
      viewPager.setAdapter(new MyViewPagerAdapter(views));
      viewPager.setCurrentItem(0);
      viewPager.setOnPageChangeListener(new OnPageChangeListener(){ public void onPageScrollStateChanged(int arg0) {
      // TODO Auto-generated method stub } public void onPageScrolled(int arg0, float arg1, int arg2) {
      // TODO Auto-generated method stub } public void onPageSelected(int arg0) {
      // TODO Auto-generated method stub } });
    • ViewPager性能问题

      在实际使用ViewPager的时候,发现若采用1080p的素材,大部分测试手机均会出现明显的卡顿和掉针,用户体验很不好。网上有帖子采用延迟加载、优先缓存来解决这个问题。后来换成720p素材,大部分测试机均不会出现卡顿。当为3页时,测试450p为最佳(450*800)。

    • ViewPager简单实例

      http://download.csdn.net/detail/he11o_liu/9572651

Android学习记录:ViewPager实现欢迎页的更多相关文章

  1. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  2. mono for android 学习记录

    C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...

  3. android 学习记录-----------android 活动 意图 碎片

    将此篇博客作为记录android项目开发过程中的学习记录

  4. Android学习笔记之滑动翻页(屏幕切换)

    如何实现手机上手动滑动翻页效果呢?呵呵,在这里我们就给你们介绍一下吧. 一般实现这个特效会用到一个控件:ViewFlipper <1>View切换的控件—ViewFlipper 这个控件是 ...

  5. 中级实训Android学习记录——Toast、AlertDialog、ProgressBar

    学习记录 2020/11/22 Toast Toast Toast是一个消息提示组件 我们可以设置其显示的位置 自定义其显示的内容 对Toast的简单封装可以达到不同的目的 Toast的默认用法 To ...

  6. Android学习记录(三)——安装SQLite

    这次学习安装SQLite. 一.SQLite简介 重要特性:零配置,即不需要复杂的配置即可使用 详细:https://www.runoob.com/sqlite/sqlite-intro.html 二 ...

  7. Android学习之ViewPager

     1.定义 ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view.其中,android.support.v4是谷歌公司为了解决当前版本碎片化的问题,从而提供的一 ...

  8. 【Android】Android 学习记录贴

    官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...

  9. Android学习记录:界面设计

    本片文章将记录进行android界面开发时积累的知识 包括 activity全屏 activity跳转 button设计 逐个输入编辑框设计 d0710 合并旧文章总结更新 d0721 添加内容 == ...

随机推荐

  1. fiddler 抓取手机app请求包

    今天心血来潮,也不知道怎么了,想着抓抓我们公司手机app的包看看,研究研究我们公司的接口,哎,我们api文档,我自己抓包看看吧.工具选择fiddler,理由免费,用着也舒服,手机设备 iPhone6 ...

  2. java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

  3. Loadrunner错误 -27727: 下载资源时步骤下载超时 (120 seconds) 已过期

    由于压力大了,下载资源所用时间就长了,可以设置加大超时时间 运行时设置 Internet 协议--首选项--高级--选项 --General--步骤下载超时(秒) 把这个值从120改为更大,如300, ...

  4. php并发加锁示例

    在工作项目中,会遇到一些php并发访问去修改一个数据问题,如果这个数据不加锁,就会造成数据的错误.下面我将分析一个财务支付锁的问题.希望对大家有所帮助. 1 没有应用锁机制 1.1 财务支付简化版本代 ...

  5. 【性能测试工具】- ApacheBench

    优点:提供的测试结果信息更完备:缺点:每次只能测试一个链接 概述: ab全称是ApacheBench,是 Apache 附带的一个HTTP性能测试小工具,可以同时模拟多个并发请求. 安装: Apach ...

  6. 常见C++面试题及基本知识点总结(一)

    [转载请注明出处]:http://www.cnblogs.com/LUO77/p/5771237.html  1. 结构体和共同体的区别. 定义: 结构体struct:把不同类型的数据组合成一个整体, ...

  7. 利用intellijidea创建maven多模块项目

    一.项目结构 multi-module-PRoject是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示,依赖于web-service参的服务. web-service ...

  8. Java微信公众平台开发之获取地理位置

    本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  9. node.js版本管理for window ---- nvmw

    1.下载nvmw  https://github.com/amiezhang/nvmw ,解压后放在某盘中 如D:\nvmw 也可以直接放在node.js的node_modules里面(这样操作就可以 ...

  10. Node.js之使用Buffer类处理二进制数据

    Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...