当下载一个app时,首次使用都会出现界面导航页面,今天就来写一个简单的页面导航,由于本人比较懒,随便找了一张图片,你可以按照你的想法换掉,废话少说,开始界面导航之旅

首先先写一个不到导航小圆点的界面导航,先单纯的使用viewPager实现界面滑动,然后加入小圆点即可实现常见的首次登陆出现导航页面

先上图,方便大家观看:

下面贴一下主要代码:

[java] view plaincopy
  1. package com.sdufe.thea.guo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.sdufe.thea.guo.adapter.MyNavigationAdapter;
  5. import android.os.Bundle;
  6. import android.app.Activity;
  7. import android.support.v4.view.ViewPager;
  8. import android.support.v4.view.ViewPager.OnPageChangeListener;
  9. import android.view.LayoutInflater;
  10. import android.view.Menu;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.view.Window;
  14. import android.view.WindowManager;
  15. import android.widget.Button;
  16. import android.widget.Toast;
  17. public class MainActivity extends Activity implements OnClickListener,
  18. OnPageChangeListener {
  19. private List<View> views;
  20. private ViewPager viewPager;
  21. private MyNavigationAdapter adapter;
  22. private View view01;
  23. private View view02;
  24. private View view03;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. requestWindowFeature(Window.FEATURE_NO_TITLE);
  29. setContentView(R.layout.activity_main);
  30. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  31. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  32. viewPager = (ViewPager) findViewById(R.id.viewpager);
  33. views = new ArrayList<View>();
  34. view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);
  35. view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);
  36. view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);
  37. views.add(view01);
  38. views.add(view02);
  39. views.add(view03);
  40. adapter = new MyNavigationAdapter(views);
  41. viewPager.setAdapter(adapter);
  42. viewPager.setOnPageChangeListener(this);
  43. Button begin = (Button) view03.findViewById(R.id.begin);
  44. begin.setOnClickListener(this);
  45. }
  46. @Override
  47. public void onClick(View v) {
  48. Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)
  49. .show();
  50. }
  51. @Override
  52. public void onPageScrollStateChanged(int arg0) {
  53. }
  54. @Override
  55. public void onPageScrolled(int arg0, float arg1, int arg2) {
  56. }
  57. @Override
  58. public void onPageSelected(int arg0) {
  59. viewPager.setCurrentItem(arg0);
  60. }
  61. }

以上就是主要代码了,主要是使用view填充viewpager的控件,对于viewPager的使用跟ListView是差不多的,都遇到个adapter,这里也贴一下adapter的代码,有疑问的可以留言

[java] view plaincopy
  1. package com.sdufe.thea.guo.adapter;
  2. import java.util.List;
  3. import android.support.v4.view.PagerAdapter;
  4. import android.support.v4.view.ViewPager;
  5. import android.view.View;
  6. public class MyNavigationAdapter extends PagerAdapter {
  7. List<View> views;
  8. public MyNavigationAdapter(List<View> views) {
  9. super();
  10. this.views = views;
  11. }
  12. @Override
  13. public int getCount() {
  14. if (views!=null) {
  15. return views.size();
  16. }
  17. return 0;
  18. }
  19. @Override
  20. public boolean isViewFromObject(View arg0, Object arg1) {
  21. return arg0==arg1;
  22. }
  23. @Override
  24. public void destroyItem(View container, int position, Object object) {
  25. ((ViewPager)container).removeView(views.get(position));
  26. }
  27. @Override
  28. public Object instantiateItem(View container, int position) {
  29. ((ViewPager)container).addView(views.get(position));
  30. return views.get(position);
  31. }
  32. }

还有就是viewPager的布局文件了,这里给个查询viewpager的快速方法,按ctrl+shirft+T,输入viewPager即可出现你需要的内容

[html] view plaincopy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <android.support.v4.view.ViewPager
  6. android:id="@+id/viewpager"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent" />
  9. <!-- 小圆点布局 -->
  10. <LinearLayout
  11. android:id="@+id/point"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentBottom="true"
  15. android:gravity="center"
  16. android:orientation="horizontal"
  17. android:visibility="gone">
  18. <ImageView
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:src="@drawable/point"/>
  22. <ImageView
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:src="@drawable/point"/>
  26. <ImageView
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:src="@drawable/point"/>
  30. </LinearLayout>
  31. </RelativeLayout>

ok用viewPager实现左右滑动就结束了,就这么简单,搞清楚原理实现起了就很快了

下面来说一说带有小圆点的界面导航,也就是你所下载的app首次安装时出现的界面导航了

实现了基本的左右滑动,实现小圆点滑动就比较简单了,首先来个选择器,用于滑动时改变小圆点的颜色:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <item android:state_enabled="false" android:drawable="@drawable/indicator_normal"></item>
  4. <item android:state_enabled="true" android:drawable="@drawable/indicator_highlight"></item>
  5. </selector>

然后初始化圆点,并且在onPageSelected(int arg0)控制圆点背景色的改变

[java] view plaincopy
  1. package com.sdufe.thea.guo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.sdufe.thea.guo.adapter.MyNavigationAdapter;
  5. import android.os.Bundle;
  6. import android.app.Activity;
  7. import android.support.v4.view.ViewPager;
  8. import android.support.v4.view.ViewPager.OnPageChangeListener;
  9. import android.view.LayoutInflater;
  10. import android.view.Menu;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.view.Window;
  14. import android.view.WindowManager;
  15. import android.widget.Button;
  16. import android.widget.ImageView;
  17. import android.widget.LinearLayout;
  18. import android.widget.Toast;
  19. public class MainActivity extends Activity implements OnClickListener,
  20. OnPageChangeListener {
  21. private List<View> views;
  22. private ViewPager viewPager;
  23. private MyNavigationAdapter adapter;
  24. private View view01;
  25. private View view02;
  26. private View view03;
  27. private LinearLayout points;
  28. private ImageView[] point;
  29. private int currentItem;
  30. @Override
  31. protected void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. requestWindowFeature(Window.FEATURE_NO_TITLE);
  34. setContentView(R.layout.activity_main);
  35. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  36. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  37. viewPager = (ViewPager) findViewById(R.id.viewpager);
  38. views = new ArrayList<View>();
  39. view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);
  40. view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);
  41. view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);
  42. views.add(view01);
  43. views.add(view02);
  44. views.add(view03);
  45. adapter = new MyNavigationAdapter(views);
  46. viewPager.setAdapter(adapter);
  47. viewPager.setOnPageChangeListener(this);
  48. Button begin = (Button) view03.findViewById(R.id.begin);
  49. begin.setOnClickListener(this);
  50. initPoint();
  51. }
  52. private void initPoint() {
  53. points=(LinearLayout) findViewById(R.id.point);
  54. point=new ImageView[views.size()];
  55. for (int i = 0; i < views.size(); i++) {
  56. point[i]=(ImageView) points.getChildAt(i);
  57. point[i].setEnabled(false);
  58. point[i].setTag(i);
  59. }
  60. currentItem=0;
  61. point[currentItem].setEnabled(true);
  62. }
  63. @Override
  64. public void onClick(View v) {
  65. Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)
  66. .show();
  67. }
  68. @Override
  69. public void onPageScrollStateChanged(int arg0) {
  70. }
  71. @Override
  72. public void onPageScrolled(int arg0, float arg1, int arg2) {
  73. }
  74. @Override
  75. public void onPageSelected(int arg0) {
  76. point[currentItem].setEnabled(false);
  77. point[arg0].setEnabled(true);
  78. currentItem=arg0;
  79. }
  80. }

结束,有疑问的留言我会回答你的问题

代码下载地址:http://download.csdn.net/detail/elinavampire/8166773

viewPager开启界面导航之旅相关推荐

  1. NGUI从入门到实战第1章开启NGUI学习之旅

    NGUI从入门到实战第1章开启NGUI学习之旅 NGUI是Unity最重要的插件之一.使用NGUI可以高效地为游戏添加界面.本书将带领大家学习NGUI.作为NGUI学习之旅的第一站,本章会在整体上介绍 ...

  2. 金融科技大数据产品推荐:Chinapex创略智能客户数据平台——开启智慧营销之旅

    智能.实时的客户数据平台是一个独特的解决方案,由AI和机器学习驱动,助力企业完成从多数据源采集.分析,到数据运用的闭环,支持各种客户相关的应用场景,包括营销.客户体验优化,以及运营等 官网 | www ...

  3. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

    摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark ...

  4. 容器开启数据服务之旅系列(四):Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制...

    容器开启数据服务之旅系列(四) Kubernetes QoS 助力在线运用与大数据离线运用的带宽控制和磁盘控制 概述 本文是2018年大数据峰会上的一些分享,关于在线业务,离线业务在ACK(阿里云容器 ...

  5. 使用SpringBoot开启微服务之旅

    \ 本文要点 \\ 微服务可以使你的代码解耦\\t 微服务可以使不同的团队专注于更小范围的工作职责.使用独立的技术.更安全更频繁地部署\\t SpringBoot支持各种REST API的实现方式\\ ...

  6. 容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛

    摘要: 通过阿里云Kubernetes容器服务,开启你的数据服务之旅 (一)云上运维自建数据库之痛,使用容器服务自动恢复数据库postgresql实例 概述 本文为大家介绍一种容器化的数据服务 pos ...

  7. viewpager默认界面_使用默认方法的界面演变–第一部分:方法

    viewpager默认界面 几周前,我们详细研究了默认方法 -Java 8中引入的一项功能,该功能允许为接口方法提供实现,即方法主体,从而定义接口中的行为. 引入此功能是为了实现接口演进 . 在JDK ...

  8. 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 1

    摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark ...

  9. 【云栖大会】与马云一起开启“飞天·进化”之旅

    与马云一起开启"飞天·进化"之旅 再过20个小时,2016杭州云栖大会就要开幕了,我们的倒计时海报也陪伴大家走过了16个日夜.相信大家会对这次大会主题"飞天·进化&quo ...

最新文章

  1. Android签名机制之---签名验证过程详解
  2. 使用session监听+spring MVC拦截器禁止用户重复登录
  3. go+cookie+angular踩过的坑
  4. Linux Exploit系列之七 绕过 ASLR -- 第二部分
  5. 探寻成功之路 企业共同关心
  6. 机器人学--运动学基础概念
  7. Java实习日记(2-1)
  8. 英尺英寸和厘米的换算_英寸和厘米的换算
  9. 许怡然:网游创业失败全攻略
  10. 运动会加油稿计算机学院150字,学校运动会加油稿150字
  11. pycharm双击打不开,没有反应,下列方法亲测有用!
  12. 职场纵横:IT职位全面解析(计算机类要找工作的朋友多看看)
  13. 关于win10输入法问题(打不出中文)解决方法
  14. 软考高级 真题 2010年下半年 信息系统项目管理师 案例分析
  15. 如何评估机器学习模型?
  16. 字符串减法、ACSII码
  17. 机器学习调参神器——网格搜索方法
  18. mach3软件常见问题和解决方案
  19. 键盘--外语键盘问题
  20. js三元运算符(? :)的链式写法

热门文章

  1. 【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )
  2. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )
  3. PHP将英文数字转换为阿拉伯数字 
  4. 关于Combobox的多选和单选情况
  5. [C# 设计模式] Adapter - 适配器模式(两种)
  6. GsonBuilder
  7. spring boot: 构建项目时报错Not a managed type
  8. JS 表单和表单元素
  9. 工程设计+算法规模化真的是AI突破吗?DeepMind唇读系统ICLR遭拒
  10. 浅谈 instanceof 和 typeof 的实现原理