现在的大多数应用都会有一个欢迎引导页面,

需求分析:

程序安装后第一次启动:

启动页-->功能引导页-->应用主页

以后启动:

启动页-->应用主页

实现原理:

用SharedPreferences实现。

创建一个boolean的变量,默认值为true。

当判断这个变量是true的时候,说明是第一次运行,就跳转到另一个引导页面。

引导页面跳转到最后一张图片时,点击某按钮发生跳转事件,回到MainActivity,此时把变量的值改成false。

引导图效果用ViewPager可以很轻松的实现。

1.布局文件

splash.xml:

1

    xmlns:tools="http://schemas.android.com/tools"3    android:layout_width="match_parent"4    android:layout_height="match_parent"5    tools:context=".SplashActivity">67android:layout_width="match_parent"9        android:layout_height="match_parent"10        android:adjustViewBounds="true"11        android:background="@drawable/welcome_android"12        android:scaleType="centerCrop"/>1314

guide.xml:

1

<?xml  version="1.0" encoding="utf-8"?>2    android:layout_width="match_parent"4    android:layout_height="match_parent"5    android:orientation="vertical">67        android:id="@+id/viewpager"9        android:layout_width="match_parent"10        android:layout_height="match_parent"/>1112android:id="@+id/ll"14        android:layout_width="wrap_content"15        android:layout_height="wrap_content"16        android:layout_alignParentBottom="true"17        android:layout_centerHorizontal="true"18        android:layout_marginBottom="24.0dp"19        android:orientation="horizontal">2021android:layout_width="wrap_content"23            android:layout_height="wrap_content"24            android:layout_gravity="center_vertical"25            android:clickable="true"26            android:padding="15.0dip"27            android:src="@drawable/dot"/>2829android:layout_width="wrap_content"31            android:layout_height="wrap_content"32            android:layout_gravity="center_vertical"33            android:clickable="true"34            android:padding="15.0dip"35            android:src="@drawable/dot"/>3637android:layout_width="wrap_content"39            android:layout_height="wrap_content"40            android:layout_gravity="center_vertical"41            android:clickable="true"42            android:padding="15.0dip"43            android:src="@drawable/dot"/>4445android:layout_width="wrap_content"47            android:layout_height="wrap_content"48            android:layout_gravity="center_vertical"49            android:clickable="true"50            android:padding="15.0dip"51            android:src="@drawable/dot"/>525354

main_activity.xml默认

what_new_one.xml、what_new_two.xml、what_new_three.xml(将图片名称改下就行了):

1

<?xml  version="1.0" encoding="utf-8"?>2    android:layout_width="match_parent"4    android:layout_height="match_parent">56android:layout_width="match_parent"8        android:layout_height="match_parent"9        android:layout_centerInParent="true"10        android:adjustViewBounds="false"11        android:focusable="true"12        android:scaleType="centerCrop"13        android:background="@drawable/guide_350_01"/>1415

what_new_four.xml:

1

<?xml  version="1.0" encoding="utf-8"?>2    android:layout_width="match_parent"4    android:layout_height="match_parent">56android:layout_width="match_parent"8        android:layout_height="match_parent"9        android:layout_centerInParent="true"10        android:adjustViewBounds="false"11        android:background="@drawable/guide_350_04"12        android:focusable="true"13        android:scaleType="centerCrop"/>1415android:id="@+id/iv_start_weibo"17        android:layout_width="wrap_content"18        android:layout_height="wrap_content"19        android:layout_alignParentBottom="true"20        android:layout_centerHorizontal="true"21        android:layout_marginBottom="108dp"22        android:background="@drawable/whats_new_start_btn"23        android:focusable="true"/>2425

MainActivity.java不变

SplashActivity.java:

1

packagecn.eoe.leigo.splash;23importandroid.app.Activity;4importandroid.content.Intent;5importandroid.content.SharedPreferences;6importandroid.os.Bundle;7importandroid.os.Handler;8importandroid.os.Message;910

/** *//**11 *12 * @{# SplashActivity.java Create on 2013-5-2 下午9:10:0113 *14 *     class desc: 启动画面 (1)判断是否是首次加载应用--采取读取SharedPreferences的方法15 *     (2)是,则进入GuideActivity;否,则进入MainActivity (3)3s后执行(2)操作16 *17 *

18 *     Copyright: Copyright(c) 201319 *

20 * @Version 1.021 * @Author Leo22 *23 *24*/25

publicclassSplashActivityextendsActivity{26booleanisFirstIn=false;2728privatestaticfinalintGO_HOME=1000;29privatestaticfinalintGO_GUIDE=1001;30//延迟3秒31privatestaticfinallongSPLASH_DELAY_MILLIS=3000;3233privatestaticfinalString SHAREDPREFERENCES_NAME="first_pref";3435

/** *//**36     * Handler:跳转到不同界面37*/38

privateHandler mHandler=newHandler(){3940        @Override41

publicvoidhandleMessage(Message msg){42

switch(msg.what){43caseGO_HOME:44                goHome();45break;46caseGO_GUIDE:47                goGuide();48break;49            }50super.handleMessage(msg);51        }52    };5354    @Override55

protectedvoidonCreate(Bundle savedInstanceState){56super.onCreate(savedInstanceState);57        setContentView(R.layout.splash);5859        init();60    }6162

privatevoidinit(){63//读取SharedPreferences中需要的数据64//使用SharedPreferences来记录程序的使用次数65SharedPreferences preferences=getSharedPreferences(66                SHAREDPREFERENCES_NAME, MODE_PRIVATE);6768//取得相应的值,如果没有该值,说明还未写入,用true作为默认值69isFirstIn=preferences.getBoolean("isFirstIn",true);7071//判断程序与第几次运行,如果是第一次运行则跳转到引导界面,否则跳转到主界面72

if(!isFirstIn){73//使用Handler的postDelayed方法,3秒后执行跳转到MainActivity74mHandler.sendEmptyMessageDelayed(GO_HOME, SPLASH_DELAY_MILLIS);75

        }else{76            mHandler.sendEmptyMessageDelayed(GO_GUIDE, SPLASH_DELAY_MILLIS);77        }7879    }8081

privatevoidgoHome(){82        Intent intent=newIntent(SplashActivity.this, MainActivity.class);83        SplashActivity.this.startActivity(intent);84        SplashActivity.this.finish();85    }8687

privatevoidgoGuide(){88        Intent intent=newIntent(SplashActivity.this, GuideActivity.class);89        SplashActivity.this.startActivity(intent);90        SplashActivity.this.finish();91    }92}93

GuideActivity.java:

1

packagecn.eoe.leigo.splash;23importjava.util.ArrayList;4importjava.util.List;56importandroid.app.Activity;7importandroid.os.Bundle;8importandroid.support.v4.view.ViewPager;9importandroid.support.v4.view.ViewPager.OnPageChangeListener;10importandroid.view.LayoutInflater;11importandroid.view.View;12importandroid.widget.ImageView;13importandroid.widget.LinearLayout;14importcn.eoe.leigo.splash.adapter.ViewPagerAdapter;1516

/** *//**17 *18 * @{# GuideActivity.java Create on 2013-5-2 下午10:59:0819 *20 *     class desc: 引导界面21 *22 *

23 *     Copyright: Copyright(c) 201324 *

25 * @Version 1.026 * @Author Leo27 *28 *29*/30

publicclassGuideActivityextendsActivityimplementsOnPageChangeListener{3132privateViewPager vp;33privateViewPagerAdapter vpAdapter;34privateListviews;3536//底部小点图片37privateImageView[] dots;3839//记录当前选中位置40privateintcurrentIndex;4142    @Override43

protectedvoidonCreate(Bundle savedInstanceState){44super.onCreate(savedInstanceState);45        setContentView(R.layout.guide);4647//初始化页面48initViews();4950//初始化底部小点51initDots();52    }5354

privatevoidinitViews(){55        LayoutInflater inflater=LayoutInflater.from(this);5657        views=newArrayList();58//初始化引导图片列表59views.add(inflater.inflate(R.layout.what_new_one,null));60        views.add(inflater.inflate(R.layout.what_new_two,null));61        views.add(inflater.inflate(R.layout.what_new_three,null));62        views.add(inflater.inflate(R.layout.what_new_four,null));6364//初始化Adapter65vpAdapter=newViewPagerAdapter(views,this);6667        vp=(ViewPager) findViewById(R.id.viewpager);68        vp.setAdapter(vpAdapter);69//绑定回调70vp.setOnPageChangeListener(this);71    }7273

privatevoidinitDots(){74        LinearLayout ll=(LinearLayout) findViewById(R.id.ll);7576        dots=newImageView[views.size()];7778//循环取得小点图片79

for(inti=0; i{80            dots[i]=(ImageView) ll.getChildAt(i);81            dots[i].setEnabled(true);//都设为灰色82}8384        currentIndex=0;85        dots[currentIndex].setEnabled(false);//设置为白色,即选中状态86}8788

privatevoidsetCurrentDot(intposition){89if(position<0||position>views.size()-190

||currentIndex==position){91return;92        }9394        dots[position].setEnabled(false);95        dots[currentIndex].setEnabled(true);9697        currentIndex=position;98    }99100//当滑动状态改变时调用101@Override102

publicvoidonPageScrollStateChanged(intarg0){103    }104105//当当前页面被滑动时调用106@Override107

publicvoidonPageScrolled(intarg0,floatarg1,intarg2){108    }109110//当新的页面被选中时调用111@Override112

publicvoidonPageSelected(intarg0){113//设置底部小点选中状态114setCurrentDot(arg0);115    }116117}118

ViewPagerAdapter.java:

1

packagecn.eoe.leigo.splash.adapter;23importjava.util.List;45importandroid.app.Activity;6importandroid.content.Context;7importandroid.content.Intent;8importandroid.content.SharedPreferences;9importandroid.content.SharedPreferences.Editor;10importandroid.os.Parcelable;11importandroid.support.v4.view.PagerAdapter;12importandroid.support.v4.view.ViewPager;13importandroid.view.View;14importandroid.view.View.OnClickListener;15importandroid.widget.ImageView;16importcn.eoe.leigo.splash.MainActivity;17importcn.eoe.leigo.splash.R;1819

/** *//**20 *21 * @{# ViewPagerAdapter.java Create on 2013-5-2 下午11:03:3922 *23 *     class desc: 引导页面适配器24 *25 *

26 *     Copyright: Copyright(c) 201327 *

28 * @Version 1.029 * @Author Leo30 *31 *32*/33

publicclassViewPagerAdapterextendsPagerAdapter{3435//界面列表36privateListviews;37privateActivity activity;3839privatestaticfinalString SHAREDPREFERENCES_NAME="first_pref";4041

publicViewPagerAdapter(Listviews, Activity activity){42this.views=views;43this.activity=activity;44    }4546//销毁arg1位置的界面47@Override48

publicvoiddestroyItem(View arg0,intarg1, Object arg2){49        ((ViewPager) arg0).removeView(views.get(arg1));50    }5152    @Override53

publicvoidfinishUpdate(View arg0){54    }5556//获得当前界面数57@Override58

publicintgetCount(){59

if(views!=null){60returnviews.size();61        }62return0;63    }6465//初始化arg1位置的界面66@Override67

publicObject instantiateItem(View arg0,intarg1){68        ((ViewPager) arg0).addView(views.get(arg1),0);69

if(arg1==views.size()-1){70            ImageView mStartWeiboImageButton=(ImageView) arg071                    .findViewById(R.id.iv_start_weibo);72

            mStartWeiboImageButton.setOnClickListener(newOnClickListener(){7374                @Override75

publicvoidonClick(View v){76//设置已经引导77setGuided();78                    goHome();7980                }8182            });83        }84returnviews.get(arg1);85    }8687

privatevoidgoHome(){88//跳转89Intent intent=newIntent(activity, MainActivity.class);90        activity.startActivity(intent);91        activity.finish();92    }9394

/** *//**95     *96     * method desc:设置已经引导过了,下次启动不用再次引导97*/98

privatevoidsetGuided(){99        SharedPreferences preferences=activity.getSharedPreferences(100                SHAREDPREFERENCES_NAME, Context.MODE_PRIVATE);101        Editor editor=preferences.edit();102//存入数据103editor.putBoolean("isFirstIn",false);104//提交修改105editor.commit();106    }107108//判断是否由对象生成界面109@Override110

publicbooleanisViewFromObject(View arg0, Object arg1){111return(arg0==arg1);112    }113114    @Override115

publicvoidrestoreState(Parcelable arg0, ClassLoader arg1){116    }117118    @Override119

publicParcelable saveState(){120returnnull;121    }122123    @Override124

publicvoidstartUpdate(View arg0){125    }126127}128

java中引导页面的,Android实现欢迎引导页面相关推荐

  1. java中刷新页面的js,[Java教程]js页面刷新之实现框架内外刷新(整体、局部)

    [Java教程]js页面刷新之实现框架内外刷新(整体.局部) 0 2016-10-12 12:00:56 这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷 ...

  2. java中引导页面的,设计模式之模板模式引导篇

    在讲模板模式原理前,我们按照惯例,先来个生活中例子.茶馆需要开发一个自动的泡咖啡和泡茶的程序. 来源:凯哥Java(kaigejava) 我们先来看看泡咖啡和泡茶的步骤: 我们根据上图写代码实现: 泡 ...

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

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

  4. JAVA中简单图形界面的创建

    在java中提供了两套图形界面类:AWT组件和SWING组件. AWT组件jdk1.0的时候就推出的图形界面类,它是位于java.awt包下的类.当时在开发AWT组件时,采用C和C++的语言,并且还调 ...

  5. 通过哪些方法可以获取页面的html元素,JavaScript获取页面元素的常用方法详解

    1.通过标签获取元素,返回一个数组 var li = document.getElementsByTagName('li');//标签获取元素 li[0].innerHTML;// 查看获取元素的内容 ...

  6. Java中运行Shell for Android

    #! /system/bin/sh #最简单的一个shell,没什么功能 #需要注意的是必须是 #! /system/bin/sh开头(有空格) #和一般linux不同,如果用#!/bin/sh就会找 ...

  7. java除了android,Java中是否有类似android中的android.os.Handler的类?

    没有一个默认.但是你可以让自己的自定义类来做类似的事情. 我做了一个这样的: import java.util.ArrayList; public class Handler extends Obje ...

  8. Java中beimage_GitHub - beconf/ImageBlurring: Android 中通过 Java 与 JNI 分别进行图片模糊;并且进行比较其运算速度。...

    ImageBlurring Android 中通过 Java 与 JNI 分别进行图片模糊:并且进行比较其运算速度. 相关文章 备注消息 Screenshots RenderScript Fast B ...

  9. 简析Java中的Serializable与Android中的Parcelable序列化

    文章目录 关于序列化 Serializable 简述原理 怎么使用 Parcelable Parcelable的实现原理 "包装公司"Parcel 装包 拆包 小结 Parcela ...

最新文章

  1. 胜任素质--哈佛大学教授麦克里兰 (McClelland)有效地预测外交官实际工作业绩的人员选拔方法...
  2. java两个文件夹比较路径_比较Java中两个文件的路径
  3. 【电商AI】商业情境中的机器学习|湾区人工智能
  4. 用cocos2d-android开发android游戏时调用box2d中的native本地函数问题
  5. wps里面函数怎么使用_wps表格函数及函数简单使用
  6. 首个智慧零碳码头:Hightopo参与天津中远海运金风智慧能源管控平台建设
  7. 【BZOJ5316】【JSOI2018】绝地反击
  8. ERDAS 2015 64位破解安装教程
  9. Django路由写法
  10. flash插件+linux,Linux下的flash插件
  11. 阿里云 云服务器最新优惠活动
  12. 监控dns流量有哪些方法?
  13. 台式计算机配置什么音响好,用什么办法才能让台式的电脑不用音响就有声音
  14. 如何用coda虚拟环境分隔多个tensorflow版本
  15. (深搜)蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。(深搜)
  16. 几何学观止(代数几何部分)
  17. 以太坊解析:默克尔树、世界状态、交易及其他
  18. PCI转串口卡的安装和使用
  19. Python_精灵和精灵组
  20. [joysticker]使用Ubuntu读取USB手柄/方向盘的输出控制

热门文章

  1. 济南职业学院计算机信息管理在哪个校区,计算机学院圆满完成省计算机信息管理专业教学指导方案开发...
  2. java数组随机排序_JAVA 生成随机数数组,并排序输出
  3. 计算机病毒是什么文件形式,【文件病毒】文件病毒的格式、危害、特点_什么是文件病毒_佰佰安全网...
  4. 皮一皮:自作多情的表率...
  5. 阿里面试:索引失效的场景有哪些?索引何时会失效?
  6. Java 16 正式发布!你还学得动吗?
  7. 程序员带娃有多“恐怖” ?!
  8. 因贡献Linux社区被Linus关注,受公司10万期权奖励!酷派重回大众视野...
  9. String长度有限制吗?是多少?还好我看过
  10. 今天开始,GitHub将启用main作为默认分支名,master将成为历史!