需要添加三个后台文件

SplashActivity(判断是否是第一次登陆)
WelcomeActivity(引导页)
ViewPagerAdapter(ViewPager控件适配器)

ViewPager是一种通过添加视图来实现左右滑动的控件,非常适合用来做引导页。
在应用第一次开启时,首先进入SplashActivity页面,通过SharePreferences存储判断登陆的布尔类型值判断用户是否是第一次打开应用,若是,跳转至引导页,否则直接跳到登陆页面。
在引导页面,使用ViewPager的addView(View v)方法添加多个视图,并且添加OnPageChangeListener监听器来监听用户的手势滑动,通过指定方法获取视图索引,从而实现视图切换。
话不多说,直接上代码:
SplashActivity

public class SplashActivity extends Activity {private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
context=SplashActivity.this;
boolean isFirstOpen=SharePerferenceUtil.IsFirstLogin(context);
if(!isFirstOpen){//不是第一次登陆
Intent intent=new Intent(context,LoginActivity.class);
startActivity(intent);
finish();
return;
}
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable() {//第一次登陆时1秒后跳到引导页
@Override
public void run() {
Intent intent=new Intent(context,WelcomeActivity.class);
startActivity(intent);
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
}, 1000);
}
}

ViewPagerAdapter

public class ViewPagerAdapter extends PagerAdapter {private List views;
public ViewPagerAdapter(List views2){
this.views=views2;
}
//获得视图总数
@Override
public int getCount() {
if(views!=null){
return views.size();
}
return 0;
}
//判断是否由对象生成视图
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return (arg0==arg1);
}
//初始化position位置的视图
@Override
public Object instantiateItem(View container, int position) {
((ViewPager)container).addView(views.get(position), 0);
return views.get(position);
}
//销毁position位置的视图
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager)container).removeView(views.get(position));
}
}

WelcomeActivity

public class WelcomeActivity extends Activity implements OnClickListener,OnPageChangeListener{private ViewPager viewPager;
private LinearLayout pointLayout;
private ViewPagerAdapter adapter;
private List views;
private Button startBtn;
private int[] guidePics = { R.layout.view_guide1, R.layout.view_guide2,
R.layout.view_guide3 };//引导页中的三张图片布局
private ImageView[] dots;//代表视图索引的圆圈
private int currentIndex;//表示前一个视图的索引
private Context context;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_welcome);
context = WelcomeActivity.this;
if (Build.VERSION.SDK_INT >= 19) {// android 4.4 以上 沉浸式状态栏
Window window = getWindow();
window.addFlags(67108864);
}
AndroidBug5497Workaround.assistActivity(WelcomeActivity.this);//解决沉浸式bug
viewPager = (ViewPager) findViewById(R.id.viewPager);
pointLayout=(LinearLayout) findViewById(R.id.pointLayout);
views = new ArrayList();
initGuidePage();
setViewPagerAdapter();
initDots();
}@Override
protected void onPause() {
super.onPause();
// 如果切换到后台,就设置下次不进入功能引导页
// SharePerferenceUtil.setFirstLogin(context, false);
}
//初始化引导页视图
private void initGuidePage() {
for (int i = 0; i < guidePics.length; i++) {
View view=LayoutInflater.from(context).inflate(guidePics[i], null);
if(i==guidePics.length-1){
startBtn=(Button) view.findViewById(R.id.btnStart);
startBtn.setTag("start");
startBtn.setOnClickListener(this);
}
views.add(view);
}
}
//设置ViewPager适配器
private void setViewPagerAdapter() {
adapter=new ViewPagerAdapter(views);
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(this);
}
//初始化圆圈
private void initDots() {
dots=new ImageView[guidePics.length];
for (int i = 0; i < guidePics.length; i++) {
dots[i]=(ImageView) pointLayout.getChildAt(i);
dots[i].setEnabled(true);
dots[i].setOnClickListener(this);
dots[i].setTag(i);
}
currentIndex=0;
dots[currentIndex].setEnabled(false);
}@Override
public void onClick(View v) {
if(v.getTag().equals("start")){
enterToLoginActivity();//点击“立即开启” 进入登陆页面
return;
}
//圆圈点击后执行
int position=(Integer) v.getTag();
setCurrentView(position);
setCurrentDot(position);
}
//设置当前视图
private void setCurrentView(int position) {
if(position<0||position>guidePics.length-1){
return;
}
viewPager.setCurrentItem(position);
}
//设置当前圆圈状态
private void setCurrentDot(int position) {
if(position<0||position>guidePics.length-1||currentIndex==position){
return;
}
dots[position].setEnabled(false);
dots[currentIndex].setEnabled(true);
currentIndex=position;
}
//通过SplashActivity中转进入LoginActivity
private void enterToLoginActivity() {
Intent intent=new Intent(context,SplashActivity.class);
startActivity(intent);
SharePerferenceUtil.setFirstLogin(context, false);//设置不是第一次登陆
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// arg0 :当前页面,及你点击滑动的页面// arg1:当前页面偏移的百分比// arg2:当前页面偏移的像素位置
}
@Override
public void onPageSelected(int position) {
setCurrentDot(position);//设置圆圈状态
}
}

引导页布局文件

< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent">< android.support.v4.view.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent"/ >< LinearLayout android:id="@+id/pointLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"android:orientation="horizontal">
底部的三个小圆圈< ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:clickable="true"android:padding="15dp"android:src="@drawable/point_bg"/ >< ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:clickable="true"android:padding="15dp"android:src="@drawable/point_bg"/ >< ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:clickable="true"android:padding="15dp"android:src="@drawable/point_bg"/ >< /LinearLayout>
< /RelativeLayout>

引导页视图(三个),这里仅贴出最后一个视图布局

< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" >< ImageView android:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/guide_3"android:scaleType="fitXY"  / >< Button android:id="@+id/btnStart"android:layout_width="200dp"android:layout_height="50dp"android:text="立即开启"android:textColor="@color/orange_express"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"android:layout_marginBottom="150dp"android:background="@drawable/startbtn_bg"/>
< /RelativeLayout>

Android如何实现引导页相关推荐

  1. Android之app引导页(背景图片切换加各个页面动画效果)

    转载:http://blog.csdn.net/lowprofile_coding/article/details/48037095 先看效果图: 1.显示三个页面的Activity  用view p ...

  2. android透明功能引导页,Android 利用PagerView做引导页

    先看实际效果,这个是用了一个APP里面的图片,不是自己的图. 第一步:创建引导页的 Activity,先在引导页上的xml定义一个ViewPager和用于下面放置圆点导航的ViewImage. and ...

  3. Android 欢迎页面 引导页

    实现欢迎页和引导页需要三个Activity,一个是实现欢迎页的Activity,在这个类中我们除了加入欢迎页还会加入广告页,一般打开APP是最先进入的是这个Activity,命名为WelcomeAct ...

  4. android用户引导页,android欢迎界面引导页

    android欢迎界面是所有程序开始的一个简短的自我介绍,让用户能够通过简单的描述和图片信息更好的了解软件,对用户体验效果非常的重要.这里我会使用VIewPager做一个欢迎界面. 1设计背景图片 根 ...

  5. 无线轮播叫小点点和引导页

    无限轮播首先创建Viewpager 1.创建无相轮播的布局 <?xml version="1.0" encoding="utf-8"?> <L ...

  6. java中引导页面的,Android实现欢迎引导页面

    现在的大多数应用都会有一个欢迎引导页面, 需求分析: 程序安装后第一次启动: 启动页-->功能引导页-->应用主页 以后启动: 启动页-->应用主页 实现原理: 用SharedPre ...

  7. Android进阶篇之引导页系列之ViewPager实现Animation动画引导页

    Android进阶篇之引导页系列之ViewPager实现Animation动画引导页 转载于:https://www.cnblogs.com/zhujiabin/p/5795789.html

  8. Android APP 引导页实现-第一次应用进入时加载

    APP引导页是每个优质APP必备的元素,下面我们研究一下如何只在第一次进入应用时进行加载引导页的方法. 1.判断是否第一次进入应用的方法: package com.yayun.guide;import ...

  9. Android项目实战(三):实现第一次进入软件的引导页

    最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_Vie ...

最新文章

  1. php imagick icon,php Imagick 生成图片
  2. spring mvc中filter的设计与实现
  3. 微信小程序教程 [第五篇]脚本语言(WXS)
  4. tomcat linux dump,Linux下Tomcat常用命令与配置
  5. airtest自动化测试_自动化测试必备实用工具,帮你提高工作效率|Gitee项目推荐...
  6. JSP生成验证码源程序
  7. $.fn.zTree 展开 回显 选中
  8. python批量打印机excel,python自动化办公系列03_单个以及批量处理excel文件
  9. web渗透测试思路浅谈-----漏洞发现及利用
  10. 47 Python - 装饰器 回忆函数基础
  11. 手机查看企业qq邮件服务器,QQ企业邮箱怎么用?手机QQ邮箱收发邮件的方法
  12. 开课通知 | 《AISHELL-3语音合成实战》课程
  13. SVN各种错误提示产生原因及处理方法
  14. 冬天来了,分享几个网页下雪js特效
  15. ~1 ccf 2022-06-2 寻宝!大冒险!
  16. 抖音文案标题怎么写,抖音标题怎么写才能上热门:国仁楠哥
  17. [面试] lcy - 箴言
  18. 谈谈百度贴吧、豆瓣小组以及BBS这个产品形态
  19. 【状语从句练习题】because / because of / although / in spite of
  20. 从网上找的 visual studio 的各个版本下载地址,vs2010/vs2012/vs2013带注册码

热门文章

  1. 前端开发中常见的鼠标事件
  2. linux(全志)初始环境到移植lvgl
  3. java去掉引号_去除所有引号的操作
  4. 【附源码】计算机毕业设计java自习室管理系统设计与实现
  5. 《惢客创业日记》2021.08.12-17(周四)惢客与互联网巨头的区别
  6. R语言计算累积平均值(Cumulative Average)、使用cumsum函数和seq_along函数计算data.frame指定数据列的累积平均值、并添加累积平均值数据列
  7. ICTCLAS(中科院分词系统)配置
  8. mysql排序 latin,MySQL排序规则:latin1_swedish_ci Vs utf8_general_ci
  9. 面对严峻的就业形势,如何提升自身就业能力,实现顺利就业
  10. Ubuntu驱动安装------官方指导版