闪屏页的实现 :

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.RelativeLayout;import com.example.pc.zhbj52.utils.PrefUtils;/*** 闪屏页* * @author Kevin* */
public class SplashActivity extends Activity {RelativeLayout rlRoot;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_splash);rlRoot = (RelativeLayout) findViewById(R.id.rl_root);startAnim();//LibUtils.doSomething();//rlRoot.setBackgroundResource(R.drawable.newscenter_press);}/*** 开启动画*/private void startAnim() {// 动画集合AnimationSet set = new AnimationSet(false);// 旋转动画RotateAnimation rotate = new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);rotate.setDuration(1000);// 动画时间rotate.setFillAfter(true);// 保持动画状态// 缩放动画ScaleAnimation scale = new ScaleAnimation(0, 1, 0, 1,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);scale.setDuration(1000);// 动画时间scale.setFillAfter(true);// 保持动画状态// 渐变动画AlphaAnimation alpha = new AlphaAnimation(0, 1);alpha.setDuration(2000);// 动画时间alpha.setFillAfter(true);// 保持动画状态set.addAnimation(rotate);set.addAnimation(scale);set.addAnimation(alpha);// 设置动画监听set.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}// 动画执行结束@Overridepublic void onAnimationEnd(Animation animation) {jumpNextPage();}});rlRoot.startAnimation(set);}/*** 跳转下一个页面*/private void jumpNextPage() {// 判断之前有没有显示过新手引导boolean userGuide = PrefUtils.getBoolean(this, "is_user_guide_showed",false);if (!userGuide) {// 跳转到新手引导页startActivity(new Intent(SplashActivity.this, GuideActivity.class));} else {startActivity(new Intent(SplashActivity.this, MainActivity.class));}finish();}}

工具类

import android.content.Context;
import android.content.SharedPreferences;/*** SharePreference封装* * @author Kevin* */
public class PrefUtils {public static final String PREF_NAME = "config";public static boolean getBoolean(Context ctx, String key,boolean defaultValue) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);return sp.getBoolean(key, defaultValue);}public static void setBoolean(Context ctx, String key, boolean value) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);sp.edit().putBoolean(key, value).commit();}
}

在新手引导页的写法是

     btnStart.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 更新sp, 表示已经展示了新手引导PrefUtils.setBoolean(GuideActivity.this,"is_user_guide_showed", true);

在主页面不需要再做判断 ,因为闪屏页已经判断了。

另外一种类似的写法,但是比较全

欢迎页

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;public class WelcomeAct extends Activity {private static final int TIME = 2000;private static final int GO_HOME = 1000;private static final int GO_GUIDE = 1001;private Handler mHandler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case GO_HOME:goHome();break;case GO_GUIDE:goGuide();break;}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.welcome);init();}private void init() {
//        SharedPreferences perPreferences = getSharedPreferences("jike", MODE_PRIVATE);
//
app第一次打开,获取的值“isFristIn”默认的值是true
//        isFirstIn = perPreferences.getBoolean("isFirstIn", true);
!isFristIn意思是!trueboolean userGuide = PrefUtils.getBoolean(this, "isFirstIn",false);if (userGuide) {
//进入主页,进入的时候还有一个时间的延时mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);} else {
//进入引导页 进入的时候还有一个时间的延时mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
//储存值“isFristIn”
//            Editor editor = perPreferences.edit();
//            editor.putBoolean("isFirstIn", false);
//            editor.commit();}}private void goHome() {Intent i = new Intent(WelcomeAct.this, MainActivity.class);startActivity(i);finish();}private void goGuide() {Intent i = new Intent(WelcomeAct.this, Guide.class);startActivity(i);finish();}}

新手引导页

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;import java.util.ArrayList;
import java.util.List;public class Guide extends Activity implements OnPageChangeListener {private ViewPager vp;private ViewPagerAdapter vpAdapter;private List<View> views;private ImageView[] dots;private int[] ids = {R.id.iv1, R.id.iv2, R.id.iv3};private Button start_btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.guide);initViews();initDots();}private void initViews() {LayoutInflater inflater = LayoutInflater.from(this);views = new ArrayList<View>();views.add(inflater.inflate(R.layout.one, null));views.add(inflater.inflate(R.layout.two, null));views.add(inflater.inflate(R.layout.three, null));//数据源vpAdapter = new ViewPagerAdapter(views, this);//列表视图vp = (ViewPager) findViewById(R.id.viewpager);//填充到ui activity中vp.setAdapter(vpAdapter);
//第二个(第三幅图片"three")的views的buttonstart_btn = (Button) views.get(2).findViewById(R.id.start_btn);start_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//表示已经展示引导页PrefUtils.setBoolean(Guide.this,"isFirstIn",true);Intent i = new Intent(Guide.this, MainActivity.class);startActivity(i);finish();}});//这是一个回调方法vp.setOnPageChangeListener(this);}//找idprivate void initDots() {dots = new ImageView[views.size()];for (int i = 0; i < views.size(); i++) {dots[i] = (ImageView) findViewById(ids[i]);}}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}//这个是点进行改变的关键代码(页面被选中的状态)//只要你手指在滑动,就会触动这个方法里面的for循环语句,它会进行三次循环i=0,1,2然后跳出循环,每滑动一个页面就会调用一次@Overridepublic void onPageSelected(int arg0) {for (int i = 0; i < ids.length; i++) {//如果agr0的值等于i,arg0的值分别是0,1,2,i的值表示的是R.id.v1 v2 v3对应的三个点的id,就是对应的点//加在一起的意思是就是 页面对应相对应的点的idif (arg0 == i) {dots[i].setImageResource(R.drawable.login_point_selected);} else {dots[i].setImageResource(R.drawable.login_point);}}}}

适配器

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;import java.util.List;public class ViewPagerAdapter extends PagerAdapter {private List<View> views;private Context context;public ViewPagerAdapter(List<View> views, Context context) {this.views = views;this.context = context;}@Overridepublic void destroyItem(View container, int position, Object object) {//销毁views((ViewPager) container).removeView(views.get(position));}@Overridepublic Object instantiateItem(View container, int position) {((ViewPager) container).addView(views.get(position));return views.get(position);}@Overridepublic int getCount() {return views.size();}//判断当前的view是不是需要的对象@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return (arg0 == arg1);}}

主页

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

工具类

import android.content.Context;
import android.content.SharedPreferences;/*** Created by pc on 2016/4/26.*/
public class PrefUtils {public static final String PREF_NAME = "jike";//需要添加Context,这样就知道是哪个对象来调用getSharedPreferencedpublic static boolean getBoolean(Context ctx, String key,boolean defaultValue) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);return sp.getBoolean(key, defaultValue);}public static void setBoolean(Context ctx,String key, boolean value) {SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE);sp.edit().putBoolean(key, value).commit();}}

源码地址:  http://pan.baidu.com/s/1pLjBAMB

闪屏页新手引导页面主页判断跳转的逻辑相关推荐

  1. 关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题

    现象 今天工作中,在对公司产品进行测试的时候,程序员小哥点出了一个问题.问题点出的步骤是这样的: 1.安装APP 2.点击打开 3.经过闪屏页,进入主页后,点击HOME键 4.再次进入程序会重新进入闪 ...

  2. 关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题...

    现象 今天工作中,在对公司产品进行测试的时候,程序员小哥点出了一个问题.问题点出的步骤是这样的: 1.安装APP 2.点击打开 3.经过闪屏页,进入主页后,点击HOME键 4.再次进入程序会重新进入闪 ...

  3. Android 12 SplashScreen(闪屏页)适配

    牢骚(废话) 谷歌真是吃饱了撑的,搞这搞那,Android12新出了一个强制闪屏页,效果就跟小米的闪屏页广告一样,只不过谷歌的是强制的,小米是可选的.不过谷歌再怎么搞,你还是要适配啊,难受. 正题 所 ...

  4. android 闪屏页处理_Android应用闪屏页延迟跳转的三种写法

    闪屏页也称之为欢迎页.在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面.闪屏页除了使用户体验更好外,还能给app留出初始化数据 ...

  5. uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现

    启动页设置 uniapp自带的启动页是一个白底的页面,上面有个uni的logo,然后周围有个圆圈的进度条,这个是启动页. uniapp中可以自定义启动页,注意两点: 不要勾选"启动界面显示等 ...

  6. 开源中国(OSChina)源码解析(2)——闪屏页

    1.前言 今天跟大家一起对闪屏页的源码进行分析.先请大家看一下,下面的视觉图,对这个闪屏页的机能有一个大致的了解. 全屏 没有状态栏 延迟加载 加载开源中国的欢迎图 2.源码分析 2.1.启动入口 我 ...

  7. Flutter——踩坑之旅(iOS闪屏页+启动页 闪屏之后会黑一下才进入启动页)

    程序猿日常 flutter填坑--iOS闪屏页+启动页效果优化 闪屏之后会黑一下进入启动页 问题描述 大部分app都有自己的启动页,我们经常在启动页做一些判断逻辑,例如 是否第一次启动app,第一次启 ...

  8. 【Android】android开发之splash闪屏页的四种实现方式,启动页的实现教程。

    2019独角兽企业重金招聘Python工程师标准>>> 作者:程序员小冰,GitHub主页: https://github.com/QQ986945193 新浪微博:http://w ...

  9. Android 闪屏页的实现

    文章目录 前言 一.闪屏页的实现方式的思考 二.闪屏实现 1.设置闪屏Activity为app首页 2.闪屏Activity的theme 3.闪屏Activity的内部实现 总结 前言 闪屏页作为ap ...

最新文章

  1. NDK JNI方式读写Android系统的demo(二)
  2. postman显示服务器错误是什么原因,Postman 500内部服务器错误api错误
  3. ListView和RecyclerView的Adapter封装
  4. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头
  5. VSCode代码格式化自动换行问题
  6. 信杂比公式_信噪比公式
  7. MATLAB工具箱概述
  8. 【译】The Science of Scientific Writing
  9. MySQL主从同步设置
  10. 微信小程序一定高度文字的展开与收起
  11. PG数据库源码-SysCache部分匹配机制
  12. 土方回填施工方案范本_基础施工方案(土方开挖、回填、混凝土)
  13. MATLAB图像处理学习——图像增强技术(附图像增强方法代码)
  14. Redis下载安装与配置(linux)
  15. lg的48分之4怎么用计算机算,E算量软件使用教程(48页)-原创力文档
  16. 智慧医院的信息集成平台建设与配电设计方案
  17. PHP二维关联数组的遍历方式
  18. 4rx4 服务器内存2rx4_854596-B21 855507-091 32GB 2Rx4 PC4-2400T HPE服务器内存
  19. 浅谈面试中的乐观锁与悲观锁
  20. 关于0Ω电阻做跨接电阻注意事项

热门文章

  1. linux环境重装rabbitmq,Linux系统安装RabbitMQ详细教程-Go语言中文社区
  2. 带滚动条html转pdf只有一页,关于html页面导出pdf滚动条以下显示不全的问题
  3. 从容器开始的良好做法
  4. WSL2 即将普遍可用,Linux 内核提供方式改变
  5. 通过社交网络进行OWIN OAuth2身份验证
  6. php判断百度ua展示不同页面,PHP 如何根据UA展示不同的前端模板
  7. ubuntu无法登陆mysql_ubuntu11.04mysql报错、无法正常工作、无法登陆mysql
  8. android4.4 ssl版本查看,OkHttp在4.4及以下不支持TLS协议的解决方法
  9. manjaro设置java_manjaro 深度学习编程环境搭建
  10. php 浮点数 模运算,同余与模运算